http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60967

            Bug ID: 60967
           Summary: ICE with range for in template function with C++11 and
                    cilkplus
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: florent.hivert at lri dot fr

It is not possible to use a range for in a template function (or member
function by the way) when compiling with C++11 and Cilkplus. The following code

int container[] = {};
template <class foo>
void bar() {
  for (int &v : container) { }
}

when compiled with

/opt/gcc-cilk/bin/g++ -std=c++11 -fcilkplus bug.cpp

triggers an internal compiler error:

bug.cpp: In function ‘void bar()’:
bug.cpp:4:30: internal compiler error: tree check: expected for_stmt or
cilk_for_stmt, have range_for_stmt in cp_parser_for, at cp/parser.c:9872
   for (int &v : container) { }
                              ^
0xccbc0a tree_check_failed(tree_node const*, char const*, int, char const*,
...)
        ../../gcc-cilk-src/gcc/tree.c:9062
0x647a57 tree_check2
        ../../gcc-cilk-src/gcc/tree.h:3826
0x647a57 cp_parser_for
        ../../gcc-cilk-src/gcc/cp/parser.c:9872
0x62b077 cp_parser_statement
        ../../gcc-cilk-src/gcc/cp/parser.c:9176
0x62c25e cp_parser_statement_seq_opt
        ../../gcc-cilk-src/gcc/cp/parser.c:9549
0x62c3a6 cp_parser_compound_statement
        ../../gcc-cilk-src/gcc/cp/parser.c:9501
0x6375a3 cp_parser_function_body
        ../../gcc-cilk-src/gcc/cp/parser.c:18709
0x6375a3 cp_parser_ctor_initializer_opt_and_function_body
        ../../gcc-cilk-src/gcc/cp/parser.c:18745
0x63986f cp_parser_function_definition_after_declarator
        ../../gcc-cilk-src/gcc/cp/parser.c:22736
0x639c1b cp_parser_function_definition_from_specifiers_and_declarator
        ../../gcc-cilk-src/gcc/cp/parser.c:22657
0x63d541 cp_parser_init_declarator
        ../../gcc-cilk-src/gcc/cp/parser.c:16367
0x63db84 cp_parser_single_declaration
        ../../gcc-cilk-src/gcc/cp/parser.c:23052
0x63de90 cp_parser_template_declaration_after_export
        ../../gcc-cilk-src/gcc/cp/parser.c:22854
0x64cd19 cp_parser_declaration
        ../../gcc-cilk-src/gcc/cp/parser.c:10815
0x64b8fd cp_parser_declaration_seq_opt
        ../../gcc-cilk-src/gcc/cp/parser.c:10737
0x64d1c2 cp_parser_translation_unit
        ../../gcc-cilk-src/gcc/cp/parser.c:3975
0x64d1c2 c_parse_file()
        ../../gcc-cilk-src/gcc/cp/parser.c:29352
0x7707d4 c_common_parse_file()
        ../../gcc-cilk-src/gcc/c-family/c-opts.c:1046


Everything is Ok if one remove the -fcilkplus option or the template line.

Reply via email to