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

            Bug ID: 85258
           Summary: [7/8 Regression] ICE with invalid range-based for-loop
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Keywords: error-recovery, ice-on-invalid-code
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: reichelt at gcc dot gnu.org
  Target Milestone: ---

The following invalid code snippet triggers an ICE since GCC 7.1.0:

============================
template<int> void foo()
{
  int x[8];
  for (int& i, j : x)
    i = 0;
}

void bar()
{
  foo<0>();
}
============================

bug.cc: In function 'void foo()':
bug.cc:4:14: error: multiple declarations in range-based 'for' loop
   for (int& i, j : x)
              ^
bug.cc: In instantiation of 'void foo() [with int <anonymous> = 0]':
bug.cc:10:10:   required from here
bug.cc:5:5: internal compiler error: Segmentation fault
     i = 0;
     ^
0xebd87f crash_signal
        ../../gcc/gcc/toplev.c:325
0x85245d reduced_constant_expression_p(tree_node*)
        ../../gcc/gcc/cp/constexpr.c:1776
0x964822 tsubst_copy
        ../../gcc/gcc/cp/pt.c:15142
0x9654ef tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/gcc/cp/pt.c:18526
0x966768 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/gcc/cp/pt.c:17467
0x965a96 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
        ../../gcc/gcc/cp/pt.c:17771
0x971627 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:17099
0x97092e tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16300
0x970f2c tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16495
0x97005c tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16286
0x96e71f tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16583
0x96d8b8 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/gcc/cp/pt.c:16271
0x96d8b8 instantiate_decl(tree_node*, bool, bool)
        ../../gcc/gcc/cp/pt.c:23682
0x99476b instantiate_pending_templates(int)
        ../../gcc/gcc/cp/pt.c:23798
0x8b8e3b c_parse_final_cleanups()
        ../../gcc/gcc/cp/decl2.c:4725
Please submit a full bug report, [etc.]

Reply via email to