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

Reply via email to