https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94000
Bug ID: 94000 Summary: ICE: tree check: expected class 'expression', have 'exceptional' (error_mark) in tree_operand_check, at tree.h:3776 Product: gcc Version: 10.0 Status: UNCONFIRMED Keywords: error-recovery, ice-on-invalid-code Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: asolokha at gmx dot com Target Milestone: --- g++-10.0.1-alpha20200301 snapshot (g:151bf47e78f5d919f6cc591d11cc1f6aff61078f) ICEs when compiling the following testcase w/ -std=c++2a: template <typename> class qb {}; template <typename> class en {}; template <typename KV> concept ph = en<KV> {}; template <typename ON> concept bt = qb<ON>; template <typename BE> concept ty = bt<BE> &&ph<BE>; template <ty> class nl; template <ty LZ> class nl<LZ> {}; % g++-10.0.1 -std=c++2a -c glmthfih.cc glmthfih.cc:4:43: error: expected primary-expression before ';' token 4 | template <typename ON> concept bt = qb<ON>; | ^ glmthfih.cc:7:24: internal compiler error: tree check: expected class 'expression', have 'exceptional' (error_mark) in tree_operand_check, at tree.h:3776 7 | template <ty LZ> class nl<LZ> {}; | ^~~~~~ 0x7ba4d2 tree_class_check_failed(tree_node const*, tree_code_class, char const*, int, char const*) /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/tree.c:9735 0x62bc8e expr_check(tree_node*, char const*, int, char const*) /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/tree.h:3447 0x62bc8e tree_operand_check(tree_node*, int, char const*, int, char const*) /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/tree.h:3776 0x62bc8e dnf_size_r /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/logic.cc:371 0x94acc0 dnf_size_r /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/logic.cc:373 0x94bc17 dnf_size /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/logic.cc:578 0x94bc17 subsumes_constraints_nonnull /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/logic.cc:862 0x94bc17 subsumes(tree_node*, tree_node*) /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/logic.cc:904 0x8b73ed strictly_subsumes(tree_node*, tree_node*, tree_node*) /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/constraint.cc:2976 0xa0e6cf process_partial_specialization /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/pt.c:5005 0xa11051 push_template_decl_real(tree_node*, bool) /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/pt.c:5603 0xa11051 push_template_decl(tree_node*) /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/pt.c:6016 0xa11051 maybe_process_partial_specialization(tree_node*) /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/pt.c:1011 0x9939c0 cp_parser_class_head /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/parser.c:24440 0x9939c0 cp_parser_class_specifier_1 /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/parser.c:23740 0x9945cb cp_parser_class_specifier /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/parser.c:24109 0x9945cb cp_parser_type_specifier /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/parser.c:17666 0x995655 cp_parser_decl_specifier_seq /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/parser.c:14314 0x9bc908 cp_parser_single_declaration /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/parser.c:29291 0x9bccbb cp_parser_template_declaration_after_parameters /var/tmp/portage/sys-devel/gcc-10.0.1_alpha20200301/work/gcc-10-20200301/gcc/cp/parser.c:28954