diff options
author | Tobias Burnus <burnus@net-b.de> | 2015-03-27 21:21:52 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2015-03-27 21:21:52 +0100 |
commit | 62021f64e550290e77a8e56270617a0a4ba673da (patch) | |
tree | ad32bfb3fd8ce11eb2a69dff037732d2d6e6fb80 /gcc/c/c-parser.c | |
parent | a5eef8e9b024741b8d661c628643a9850616b813 (diff) | |
download | gcc-62021f64e550290e77a8e56270617a0a4ba673da.zip gcc-62021f64e550290e77a8e56270617a0a4ba673da.tar.gz gcc-62021f64e550290e77a8e56270617a0a4ba673da.tar.bz2 |
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
Diffstat (limited to 'gcc/c/c-parser.c')
-rw-r--r-- | gcc/c/c-parser.c | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 5cc3892..024dbd2 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -991,24 +991,24 @@ c_parser_skip_to_end_of_parameter (c_parser *parser) end of line marker. */ 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); parser->in_pragma = false; - if (!c_parser_require (parser, CPP_PRAGMA_EOL, "expected end of line")) - while (true) - { - c_token *token = c_parser_peek_token (parser); - if (token->type == CPP_EOF) - break; - if (token->type == CPP_PRAGMA_EOL) - { - c_parser_consume_token (parser); - break; - } - c_parser_consume_token (parser); - } + if (error_if_not_eol && c_parser_peek_token (parser)->type != CPP_PRAGMA_EOL) + c_parser_error (parser, "expected end of line"); + + cpp_ttype token_type; + do + { + c_token *token = c_parser_peek_token (parser); + token_type = token->type; + if (token_type == CPP_EOF) + break; + c_parser_consume_token (parser); + } + while (token_type != CPP_PRAGMA_EOL); parser->error = false; } @@ -13223,7 +13223,7 @@ c_parser_omp_for (location_t loc, c_parser *parser, } if (!flag_openmp) /* flag_openmp_simd */ { - c_parser_skip_to_pragma_eol (parser); + c_parser_skip_to_pragma_eol (parser, false); return NULL_TREE; } @@ -13448,7 +13448,7 @@ c_parser_omp_parallel (location_t loc, c_parser *parser, } 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; } else if (c_parser_next_token_is (parser, CPP_NAME)) @@ -13708,7 +13708,7 @@ c_parser_omp_distribute (location_t loc, c_parser *parser, } if (!flag_openmp) /* flag_openmp_simd */ { - c_parser_skip_to_pragma_eol (parser); + c_parser_skip_to_pragma_eol (parser, false); return NULL_TREE; } @@ -13776,7 +13776,7 @@ c_parser_omp_teams (location_t loc, c_parser *parser, } if (!flag_openmp) /* flag_openmp_simd */ { - c_parser_skip_to_pragma_eol (parser); + c_parser_skip_to_pragma_eol (parser, false); return NULL_TREE; } @@ -13921,7 +13921,7 @@ c_parser_omp_target (c_parser *parser, enum pragma_context context) } else if (!flag_openmp) /* flag_openmp_simd */ { - c_parser_skip_to_pragma_eol (parser); + c_parser_skip_to_pragma_eol (parser, false); return false; } else if (strcmp (p, "data") == 0) @@ -14604,7 +14604,7 @@ c_parser_omp_declare (c_parser *parser, enum pragma_context context) } if (!flag_openmp) /* flag_openmp_simd */ { - c_parser_skip_to_pragma_eol (parser); + c_parser_skip_to_pragma_eol (parser, false); return; } if (strcmp (p, "target") == 0) |