Hi! This patch (well, the first hunk) fixes a bug where p_name was uninitialized for -fopenmp-simd and we were strcating to it. The second hunk removes a bogus ATTRIBUTE_UNUSED parameter and unused p_name variable I've noticed while looking around, and the C++ FE hunk makes sure we don't call keep_next_level for -fopenmp-simd (because we don't call then begin_omp_structured_block and thus it keeps probably completely unrelated block later on).
Bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk. 2013-11-28 Jakub Jelinek <ja...@redhat.com> PR c/59310 * c-parser.c (c_parser_omp_target): Copy "#pragma omp target" to p_name before calling c_parser_omp_teams instead of after. (c_parser_cilk_simd): Remove wrong ATTRIBUTE_UNUSED from parser argument. Remove unused p_name variable. * parser.c (cp_parser_omp_target): Call keep_next_level only if flag_openmp. --- gcc/c/c-parser.c.jj 2013-11-22 21:03:06.000000000 +0100 +++ gcc/c/c-parser.c 2013-11-27 16:04:39.818103277 +0100 @@ -12529,10 +12529,10 @@ c_parser_omp_target (c_parser *parser, e "parallel for simd")]; c_parser_consume_token (parser); + strcpy (p_name, "#pragma omp target"); if (!flag_openmp) /* flag_openmp_simd */ return c_parser_omp_teams (loc, parser, p_name, OMP_TARGET_CLAUSE_MASK, cclauses); - strcpy (p_name, "#pragma omp target"); keep_next_level (); tree block = c_begin_compound_stmt (true); tree ret = c_parser_omp_teams (loc, parser, p_name, @@ -13566,10 +13566,8 @@ c_parser_cilk_all_clauses (c_parser *par loops. */ static void -c_parser_cilk_simd (c_parser *parser ATTRIBUTE_UNUSED) +c_parser_cilk_simd (c_parser *parser) { - char p_name[100]; - strcpy (p_name, "#pragma omp"); tree clauses = c_parser_cilk_all_clauses (parser); tree block = c_begin_compound_stmt (true); location_t loc = c_parser_peek_token (parser)->location; --- gcc/cp/parser.c.jj 2013-11-26 21:39:17.000000000 +0100 +++ gcc/cp/parser.c 2013-11-27 16:06:30.552529617 +0100 @@ -29968,10 +29968,10 @@ cp_parser_omp_target (cp_parser *parser, cp_lexer_consume_token (parser->lexer); strcpy (p_name, "#pragma omp target"); - keep_next_level (true); if (!flag_openmp) /* flag_openmp_simd */ return cp_parser_omp_teams (parser, pragma_tok, p_name, OMP_TARGET_CLAUSE_MASK, cclauses); + keep_next_level (true); tree sb = begin_omp_structured_block (); unsigned save = cp_parser_begin_omp_structured_block (parser); tree ret = cp_parser_omp_teams (parser, pragma_tok, p_name, Jakub