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

            Bug ID: 84705
           Summary: internal compiler error: in add_stmt, at
                    cp/semantics.c:390
           Product: gcc
           Version: 8.0.1
            Status: UNCONFIRMED
          Keywords: ice-on-invalid-code
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vegard.nossum at gmail dot com
                CC: webrown.cpp at gmail dot com
  Target Milestone: ---

Input:

int a[]{a};

template<int>
struct b {
  __attribute__((c([] {
    struct {
      int a = static_cast<struct d>(a);
    } e;
  })));
};

Output:

$ xgcc -x c++ -S  -
<stdin>:1:10: error: invalid conversion from 'int*' to 'int' [-fpermissive]
<stdin>:7:34: internal compiler error: in add_stmt, at cp/semantics.c:390
0x125ac1b add_stmt(tree_node*)
        /home/vegard/git/gcc/gcc/cp/semantics.c:390
0xe67cab do_pushtag
        /home/vegard/git/gcc/gcc/cp/name-lookup.c:6475
0xe67cab pushtag(tree_node*, tree_node*, tag_scope)
        /home/vegard/git/gcc/gcc/cp/name-lookup.c:6514
0xb63cd5 xref_tag_1
        /home/vegard/git/gcc/gcc/cp/decl.c:13724
0xb63cd5 xref_tag(tag_types, tree_node*, tag_scope, bool)
        /home/vegard/git/gcc/gcc/cp/decl.c:13781
0xf87b9d cp_parser_elaborated_type_specifier
        /home/vegard/git/gcc/gcc/cp/parser.c:17916
0xf26acc cp_parser_type_specifier
        /home/vegard/git/gcc/gcc/cp/parser.c:16800
0xf2af47 cp_parser_type_specifier_seq
        /home/vegard/git/gcc/gcc/cp/parser.c:21101
0xf6412a cp_parser_type_id_1
        /home/vegard/git/gcc/gcc/cp/parser.c:20944
0xf79104 cp_parser_type_id
        /home/vegard/git/gcc/gcc/cp/parser.c:21012
0xf79104 cp_parser_postfix_expression
        /home/vegard/git/gcc/gcc/cp/parser.c:6724
0xf2e927 cp_parser_unary_expression
        /home/vegard/git/gcc/gcc/cp/parser.c:8320
0xec435a cp_parser_cast_expression
        /home/vegard/git/gcc/gcc/cp/parser.c:9088
0xec6986 cp_parser_binary_expression
        /home/vegard/git/gcc/gcc/cp/parser.c:9189
0xeca75a cp_parser_assignment_expression
        /home/vegard/git/gcc/gcc/cp/parser.c:9484
0xed0533 cp_parser_constant_expression
        /home/vegard/git/gcc/gcc/cp/parser.c:9768
0xed77de cp_parser_initializer_clause
        /home/vegard/git/gcc/gcc/cp/parser.c:21914
0xee0723 cp_parser_initializer
        /home/vegard/git/gcc/gcc/cp/parser.c:21854
0xee0961 cp_parser_late_parse_one_default_arg
        /home/vegard/git/gcc/gcc/cp/parser.c:27759
0xf1a050 cp_parser_late_parsing_nsdmi
        /home/vegard/git/gcc/gcc/cp/parser.c:27811

$ xgcc --version
xgcc (GCC) 8.0.1 20180303 (experimental)

Built from git 0d86c284d085d29782d862600a79aa1ff0ee0c47 (r258221).

Seems to have appeared between 4.7.4 and 4.8.1 (when using -std=c++11).

If you change the initializer for 'a' to this:

int a[]{};

you get a segfault instead:

xgcc -x c++ -S  -
<stdin>:7:34: internal compiler error: Segmentation fault
0x3156909 crash_signal
        /home/vegard/git/gcc/gcc/toplev.c:325
0x125ab8a add_stmt(tree_node*)
        /home/vegard/git/gcc/gcc/cp/semantics.c:390
0xe67cab do_pushtag
        /home/vegard/git/gcc/gcc/cp/name-lookup.c:6475
0xe67cab pushtag(tree_node*, tree_node*, tag_scope)
        /home/vegard/git/gcc/gcc/cp/name-lookup.c:6514
0xb63cd5 xref_tag_1
        /home/vegard/git/gcc/gcc/cp/decl.c:13724
[...]

Test case was minimised by C-Reduce.

Reply via email to