http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60331
Bug ID: 60331 Summary: ICE with OpenMP #pragma omp declare reduction in template class Product: gcc Version: 4.9.0 Status: UNCONFIRMED Keywords: ice-on-valid-code, openmp Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: reichelt at gcc dot gnu.org The following valid(?) code snippet (compiled with "-std=c++11 -fopenmp") triggers an ICE on trunk: =============================================================================== template<typename> struct A { #pragma omp declare reduction (x : int : omp_out += omp_in) initializer (omp_priv = omp_priv) }; =============================================================================== bug.cc: In static member function 'static void A< <template-parameter-1-1> >::omp declare reduction x~i(int&)': bug.cc:3:87: sorry, unimplemented: unexpected AST of kind decl_expr #pragma omp declare reduction (x : int : omp_out += omp_in) initializer (omp_priv = omp_priv) ^ bug.cc:3:87: internal compiler error: in potential_constant_expression_1, at cp/semantics.c:10553 0x746309 potential_constant_expression_1 ../../gcc/gcc/cp/semantics.c:10553 0x6105a8 fold_non_dependent_expr_sfinae(tree_node*, int) ../../gcc/gcc/cp/pt.c:5111 0x610619 build_non_dependent_expr(tree_node*) ../../gcc/gcc/cp/pt.c:21306 0x72b0e0 finish_expr_stmt(tree_node*) ../../gcc/gcc/cp/semantics.c:688 0x6d2629 cp_parser_omp_declare_reduction_exprs ../../gcc/gcc/cp/parser.c:30638 0x6d404a cp_parser_late_parsing_for_member ../../gcc/gcc/cp/parser.c:23503 0x6ae0bc cp_parser_class_specifier_1 ../../gcc/gcc/cp/parser.c:19451 0x6ae0bc cp_parser_class_specifier ../../gcc/gcc/cp/parser.c:19482 0x6ae0bc cp_parser_type_specifier ../../gcc/gcc/cp/parser.c:14305 0x6c6ec0 cp_parser_decl_specifier_seq ../../gcc/gcc/cp/parser.c:11547 0x6ccb63 cp_parser_single_declaration ../../gcc/gcc/cp/parser.c:23082 0x6cd044 cp_parser_template_declaration_after_export ../../gcc/gcc/cp/parser.c:22958 0x6d83e9 cp_parser_declaration ../../gcc/gcc/cp/parser.c:10947 0x6d6ed8 cp_parser_declaration_seq_opt ../../gcc/gcc/cp/parser.c:10869 0x6d877a cp_parser_translation_unit ../../gcc/gcc/cp/parser.c:4014 0x6d877a c_parse_file() ../../gcc/gcc/cp/parser.c:31582 0x7f79f3 c_common_parse_file() ../../gcc/gcc/c-family/c-opts.c:1060 Please submit a full bug report, [etc.] Without "-std=c++11" or without the template, the code compiles fine.