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.