Commit 62021f64 by Tobias Burnus Committed by Tobias Burnus

re PR c/65586 (-fopenmp-simd rejects valid input)

2015-03-27  Tobias Burnus  <burnus@net-b.de>

        PR c/65586
gcc/c/
        * c-parser.c (c_parser_skip_to_pragma_eol): Optionally, don't
        error out.
        (c_parser_omp_for, c_parser_omp_parallel, c_parser_omp_distribute,
        c_parser_omp_teams, c_parser_omp_target, c_parser_omp_declare):
        Update calls to not error for skipped omp pragmas with -fopenmp-simd.

gcc/cp/
        * parser.c (cp_parser_omp_for, cp_parser_omp_parallel,
        cp_parser_omp_distribute, cp_parser_omp_teams, cp_parser_omp_target,
        cp_parser_omp_declare): Don't show error for skipped omp pragmas
        with -fopenmp-simd.

gcc/testsuite/
        * g++.dg/gomp/openmp-simd-3.C: New.
        * gcc.dg/gomp/openmp-simd-3.c: New.

From-SVN: r221744
parent a5eef8e9
2015-03-27 Tobias Burnus <burnus@net-b.de>
PR c/65586
* c-parser.c (c_parser_skip_to_pragma_eol): Optionally, don't
error out.
(c_parser_omp_for, c_parser_omp_parallel, c_parser_omp_distribute,
c_parser_omp_teams, c_parser_omp_target, c_parser_omp_declare):
Update calls to not error for skipped omp pragmas with -fopenmp-simd.
2015-03-19 Jakub Jelinek <jakub@redhat.com> 2015-03-19 Jakub Jelinek <jakub@redhat.com>
* c-decl.c (c_decl_attributes): Also add "omp declare target" * c-decl.c (c_decl_attributes): Also add "omp declare target"
......
...@@ -991,24 +991,24 @@ c_parser_skip_to_end_of_parameter (c_parser *parser) ...@@ -991,24 +991,24 @@ c_parser_skip_to_end_of_parameter (c_parser *parser)
end of line marker. */ end of line marker. */
static void static void
c_parser_skip_to_pragma_eol (c_parser *parser) c_parser_skip_to_pragma_eol (c_parser *parser, bool error_if_not_eol = true)
{ {
gcc_assert (parser->in_pragma); gcc_assert (parser->in_pragma);
parser->in_pragma = false; parser->in_pragma = false;
if (!c_parser_require (parser, CPP_PRAGMA_EOL, "expected end of line")) if (error_if_not_eol && c_parser_peek_token (parser)->type != CPP_PRAGMA_EOL)
while (true) c_parser_error (parser, "expected end of line");
{
c_token *token = c_parser_peek_token (parser); cpp_ttype token_type;
if (token->type == CPP_EOF) do
break; {
if (token->type == CPP_PRAGMA_EOL) c_token *token = c_parser_peek_token (parser);
{ token_type = token->type;
c_parser_consume_token (parser); if (token_type == CPP_EOF)
break; break;
} c_parser_consume_token (parser);
c_parser_consume_token (parser); }
} while (token_type != CPP_PRAGMA_EOL);
parser->error = false; parser->error = false;
} }
...@@ -13223,7 +13223,7 @@ c_parser_omp_for (location_t loc, c_parser *parser, ...@@ -13223,7 +13223,7 @@ c_parser_omp_for (location_t loc, c_parser *parser,
} }
if (!flag_openmp) /* flag_openmp_simd */ if (!flag_openmp) /* flag_openmp_simd */
{ {
c_parser_skip_to_pragma_eol (parser); c_parser_skip_to_pragma_eol (parser, false);
return NULL_TREE; return NULL_TREE;
} }
...@@ -13448,7 +13448,7 @@ c_parser_omp_parallel (location_t loc, c_parser *parser, ...@@ -13448,7 +13448,7 @@ c_parser_omp_parallel (location_t loc, c_parser *parser,
} }
else if (!flag_openmp) /* flag_openmp_simd */ else if (!flag_openmp) /* flag_openmp_simd */
{ {
c_parser_skip_to_pragma_eol (parser); c_parser_skip_to_pragma_eol (parser, false);
return NULL_TREE; return NULL_TREE;
} }
else if (c_parser_next_token_is (parser, CPP_NAME)) else if (c_parser_next_token_is (parser, CPP_NAME))
...@@ -13708,7 +13708,7 @@ c_parser_omp_distribute (location_t loc, c_parser *parser, ...@@ -13708,7 +13708,7 @@ c_parser_omp_distribute (location_t loc, c_parser *parser,
} }
if (!flag_openmp) /* flag_openmp_simd */ if (!flag_openmp) /* flag_openmp_simd */
{ {
c_parser_skip_to_pragma_eol (parser); c_parser_skip_to_pragma_eol (parser, false);
return NULL_TREE; return NULL_TREE;
} }
...@@ -13776,7 +13776,7 @@ c_parser_omp_teams (location_t loc, c_parser *parser, ...@@ -13776,7 +13776,7 @@ c_parser_omp_teams (location_t loc, c_parser *parser,
} }
if (!flag_openmp) /* flag_openmp_simd */ if (!flag_openmp) /* flag_openmp_simd */
{ {
c_parser_skip_to_pragma_eol (parser); c_parser_skip_to_pragma_eol (parser, false);
return NULL_TREE; return NULL_TREE;
} }
...@@ -13921,7 +13921,7 @@ c_parser_omp_target (c_parser *parser, enum pragma_context context) ...@@ -13921,7 +13921,7 @@ c_parser_omp_target (c_parser *parser, enum pragma_context context)
} }
else if (!flag_openmp) /* flag_openmp_simd */ else if (!flag_openmp) /* flag_openmp_simd */
{ {
c_parser_skip_to_pragma_eol (parser); c_parser_skip_to_pragma_eol (parser, false);
return false; return false;
} }
else if (strcmp (p, "data") == 0) else if (strcmp (p, "data") == 0)
...@@ -14604,7 +14604,7 @@ c_parser_omp_declare (c_parser *parser, enum pragma_context context) ...@@ -14604,7 +14604,7 @@ c_parser_omp_declare (c_parser *parser, enum pragma_context context)
} }
if (!flag_openmp) /* flag_openmp_simd */ if (!flag_openmp) /* flag_openmp_simd */
{ {
c_parser_skip_to_pragma_eol (parser); c_parser_skip_to_pragma_eol (parser, false);
return; return;
} }
if (strcmp (p, "target") == 0) if (strcmp (p, "target") == 0)
......
2015-03-27 Tobias Burnus <burnus@net-b.de>
PR c/65586
* parser.c (cp_parser_omp_for, cp_parser_omp_parallel,
cp_parser_omp_distribute, cp_parser_omp_teams, cp_parser_omp_target,
cp_parser_omp_declare): Don't show error for skipped omp pragmas with
-fopenmp-simd.
2015-03-27 Marek Polacek <polacek@redhat.com> 2015-03-27 Marek Polacek <polacek@redhat.com>
PR c++/65556 PR c++/65556
......
...@@ -30768,7 +30768,7 @@ cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok, ...@@ -30768,7 +30768,7 @@ cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok,
} }
if (!flag_openmp) /* flag_openmp_simd */ if (!flag_openmp) /* flag_openmp_simd */
{ {
cp_parser_require_pragma_eol (parser, pragma_tok); cp_parser_skip_to_pragma_eol (parser, pragma_tok);
return NULL_TREE; return NULL_TREE;
} }
...@@ -30979,7 +30979,7 @@ cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok, ...@@ -30979,7 +30979,7 @@ cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok,
} }
else if (!flag_openmp) /* flag_openmp_simd */ else if (!flag_openmp) /* flag_openmp_simd */
{ {
cp_parser_require_pragma_eol (parser, pragma_tok); cp_parser_skip_to_pragma_eol (parser, pragma_tok);
return NULL_TREE; return NULL_TREE;
} }
else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)) else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
...@@ -31242,7 +31242,7 @@ cp_parser_omp_distribute (cp_parser *parser, cp_token *pragma_tok, ...@@ -31242,7 +31242,7 @@ cp_parser_omp_distribute (cp_parser *parser, cp_token *pragma_tok,
} }
if (!flag_openmp) /* flag_openmp_simd */ if (!flag_openmp) /* flag_openmp_simd */
{ {
cp_parser_require_pragma_eol (parser, pragma_tok); cp_parser_skip_to_pragma_eol (parser, pragma_tok);
return NULL_TREE; return NULL_TREE;
} }
...@@ -31321,7 +31321,7 @@ cp_parser_omp_teams (cp_parser *parser, cp_token *pragma_tok, ...@@ -31321,7 +31321,7 @@ cp_parser_omp_teams (cp_parser *parser, cp_token *pragma_tok,
} }
if (!flag_openmp) /* flag_openmp_simd */ if (!flag_openmp) /* flag_openmp_simd */
{ {
cp_parser_require_pragma_eol (parser, pragma_tok); cp_parser_skip_to_pragma_eol (parser, pragma_tok);
return NULL_TREE; return NULL_TREE;
} }
...@@ -31466,7 +31466,7 @@ cp_parser_omp_target (cp_parser *parser, cp_token *pragma_tok, ...@@ -31466,7 +31466,7 @@ cp_parser_omp_target (cp_parser *parser, cp_token *pragma_tok,
} }
else if (!flag_openmp) /* flag_openmp_simd */ else if (!flag_openmp) /* flag_openmp_simd */
{ {
cp_parser_require_pragma_eol (parser, pragma_tok); cp_parser_skip_to_pragma_eol (parser, pragma_tok);
return false; return false;
} }
else if (strcmp (p, "data") == 0) else if (strcmp (p, "data") == 0)
...@@ -32442,7 +32442,7 @@ cp_parser_omp_declare (cp_parser *parser, cp_token *pragma_tok, ...@@ -32442,7 +32442,7 @@ cp_parser_omp_declare (cp_parser *parser, cp_token *pragma_tok,
} }
if (!flag_openmp) /* flag_openmp_simd */ if (!flag_openmp) /* flag_openmp_simd */
{ {
cp_parser_require_pragma_eol (parser, pragma_tok); cp_parser_skip_to_pragma_eol (parser, pragma_tok);
return; return;
} }
if (strcmp (p, "target") == 0) if (strcmp (p, "target") == 0)
......
2015-03-27 Tobias Burnus <burnus@net-b.de>
PR c/65586
* g++.dg/gomp/openmp-simd-3.C: New.
* gcc.dg/gomp/openmp-simd-3.c: New.
2015-03-27 H.J. Lu <hongjiu.lu@intel.com> 2015-03-27 H.J. Lu <hongjiu.lu@intel.com>
PR target/65248 PR target/65248
......
/* { dg-do compile } */
/* { dg-options "-fopenmp-simd -fdump-tree-original" } */
/* PR c/65586 */
void foo() { }
int main() {
#pragma omp for collapse(1)
for (int i = 1; i <= 151; i+=31)
foo();
}
/* { dg-final { scan-tree-dump-not "omp" "original" } } */
/* { dg-final { cleanup-tree-dump "original" } } */
/* { dg-do compile } */
/* { dg-options "-fopenmp-simd -fdump-tree-original" } */
/* PR c/65586 */
void foo() { }
int main() {
#pragma omp for collapse(1)
for (int i = 1; i <= 151; i+=31)
foo();
}
/* { dg-final { scan-tree-dump-not "omp" "original" } } */
/* { dg-final { cleanup-tree-dump "original" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment