[Bug c++/92774] New: ICE with defaulted three-way comparison function
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Dec 3 15:54:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92774
Bug ID: 92774
Summary: ICE with defaulted three-way comparison function
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: redi at gcc dot gnu.org
Target Milestone: ---
#include <compare>
template<typename T>
struct X { };
template<typename T>
bool operator==(const X<T>&, const X<T>&) { return true; }
template<typename T>
bool operator<(const X<T>&, const X<T>&) { return true; }
struct Y
{
int a;
X<int> c;
auto operator <=>(Y const&) const = default;
};
void f()
{
auto x = Y() < Y();
}
This gets an ICE when compiled with -std=gnu++2a:
ice.cc: In member function 'constexpr auto Y::operator<=>(const Y&) const':
ice.cc:16:8: internal compiler error: tree check: expected class 'type', have
'exceptional' (error_mark) in is_cat, at cp/method.c:999
16 | auto operator <=>(Y const&) const = default;
| ^~~~~~~~
0x7e1d30 tree_class_check_failed(tree_node const*, tree_code_class, char
const*, int, char const*)
/home/jwakely/src/gcc/gcc/gcc/tree.c:9738
0x618612 tree_class_check(tree_node*, tree_code_class, char const*, int, char
const*)
/home/jwakely/src/gcc/gcc/gcc/tree.h:3396
0x618612 is_cat
/home/jwakely/src/gcc/gcc/gcc/cp/method.c:999
0x9a226c cat_tag_for
/home/jwakely/src/gcc/gcc/gcc/cp/method.c:1011
0x9a226c common_comparison_type
/home/jwakely/src/gcc/gcc/gcc/cp/method.c:1166
0x9a226c build_comparison_op
/home/jwakely/src/gcc/gcc/gcc/cp/method.c:1341
0x9a8809 synthesize_method(tree_node*)
/home/jwakely/src/gcc/gcc/gcc/cp/method.c:1501
0x9637c7 mark_used(tree_node*, int)
/home/jwakely/src/gcc/gcc/gcc/cp/decl2.c:5481
0x8c8611 build_over_call
/home/jwakely/src/gcc/gcc/gcc/cp/call.c:8956
0x8cfc58 build_new_op_1
/home/jwakely/src/gcc/gcc/gcc/cp/call.c:6234
0x8d023d build_new_op(op_location_t const&, tree_code, int, tree_node*,
tree_node*, tree_node*, tree_node**, int)
/home/jwakely/src/gcc/gcc/gcc/cp/call.c:6499
0xa9b533 build_x_binary_op(op_location_t const&, tree_code, tree_node*,
tree_code, tree_node*, tree_code, tree_node**, int)
/home/jwakely/src/gcc/gcc/gcc/cp/typeck.c:4229
0x9cc6e1 cp_parser_binary_expression
/home/jwakely/src/gcc/gcc/gcc/cp/parser.c:9645
0x9cd557 cp_parser_assignment_expression
/home/jwakely/src/gcc/gcc/gcc/cp/parser.c:9780
0x9ccf3d cp_parser_constant_expression
/home/jwakely/src/gcc/gcc/gcc/cp/parser.c:10074
0x9cd501 cp_parser_initializer_clause
/home/jwakely/src/gcc/gcc/gcc/cp/parser.c:23023
0x9d16a7 cp_parser_initializer
/home/jwakely/src/gcc/gcc/gcc/cp/parser.c:22961
0x9fa521 cp_parser_init_declarator
/home/jwakely/src/gcc/gcc/gcc/cp/parser.c:20669
0x9da932 cp_parser_simple_declaration
/home/jwakely/src/gcc/gcc/gcc/cp/parser.c:13624
0x9dc669 cp_parser_declaration_statement
/home/jwakely/src/gcc/gcc/gcc/cp/parser.c:13055
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
More information about the Gcc-bugs
mailing list