diff mbox

[committed] Fix -fopenmp-simd (PR c/59310)

Message ID 20131127234854.GH892@tucnak.redhat.com
State New
Headers show

Commit Message

Jakub Jelinek Nov. 27, 2013, 11:48 p.m. UTC
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  <jakub@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.


	Jakub
diff mbox

Patch

--- 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,