https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91845
Bug ID: 91845
Summary: [10 Regression] ICE: tree check: expected class
'type', have 'exceptional' (error_mark) in
build_m_component_ref, at cp/typeck2.c:2086
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.0-alpha20190915 snapshot (r275736) ICEs when compiling the following
testcase reduced from test/CXX/drs/dr20xx.cpp from the clang 9.0.0 testsuite:
void non_const_mem_ptr() {
struct A {
};
constexpr A a = {1, 2};
struct B {
int A::*p;
constexpr int g() const {
return a.*p;
};
};
}
% g++-10.0.0-alpha20190915 -c ecqppima.cpp
ecqppima.cpp: In function 'void non_const_mem_ptr()':
ecqppima.cpp:5:24: error: too many initializers for 'const
non_const_mem_ptr()::A'
5 | constexpr A a = {1, 2};
| ^
ecqppima.cpp: In member function 'constexpr int non_const_mem_ptr()::B::g()
const':
ecqppima.cpp:9:14: error: use of local variable with automatic storage from
containing function
9 | return a.*p;
| ^
ecqppima.cpp:5:15: note: 'constexpr const non_const_mem_ptr()::A a' declared
here
5 | constexpr A a = {1, 2};
| ^
ecqppima.cpp:9:17: internal compiler error: tree check: expected class 'type',
have 'exceptional' (error_mark) in build_m_component_ref, at cp/typeck2.c:2086
9 | return a.*p;
| ^
0x7d6093 tree_class_check_failed(tree_node const*, tree_code_class, char
const*, int, char const*)
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/tree.c:9972
0x6846b7 tree_class_check(tree_node*, tree_code_class, char const*, int, char
const*)
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/tree.h:3390
0x6846b7 build_m_component_ref(tree_node*, tree_node*, int)
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/typeck2.c:2086
0xa627b2 build_x_binary_op(op_location_t const&, tree_code, tree_node*,
tree_code, tree_node*, tree_code, tree_node**, int)
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/typeck.c:4183
0x99e924 cp_parser_binary_expression
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:9645
0x99f689 cp_parser_assignment_expression
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:9780
0x99f90c cp_parser_expression
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:9948
0x9afd2a cp_parser_jump_statement
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:12951
0x9afd2a cp_parser_statement
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:11233
0x9b03b5 cp_parser_statement_seq_opt
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:11699
0x9b0485 cp_parser_compound_statement
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:11653
0x9c906c cp_parser_function_body
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:22702
0x9c906c cp_parser_ctor_initializer_opt_and_function_body
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:22753
0x9c995d cp_parser_function_definition_after_declarator
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:28074
0x9cab51 cp_parser_late_parsing_for_member
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:28959
0x9aa355 cp_parser_class_specifier_1
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:23784
0x9ab394 cp_parser_class_specifier
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:23810
0x9ab394 cp_parser_type_specifier
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:17475
0x9ac199 cp_parser_decl_specifier_seq
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:14174
0x9acb0a cp_parser_simple_declaration
/var/tmp/portage/sys-devel/gcc-10.0.0_alpha20190915/work/gcc-10-20190915/gcc/cp/parser.c:13460