diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2016-06-29 11:08:04 +0200 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gcc.gnu.org> | 2016-06-29 11:08:04 +0200 |
commit | 54d19c3b7fb38097973a57b6e822e15cbcbd031d (patch) | |
tree | 607bd431945a31016513565efdb3f36e5a571dfb /gcc/cp | |
parent | f9d8d99478f3b02e55a69b166a70646c87a7f5cd (diff) | |
download | gcc-54d19c3b7fb38097973a57b6e822e15cbcbd031d.zip gcc-54d19c3b7fb38097973a57b6e822e15cbcbd031d.tar.gz gcc-54d19c3b7fb38097973a57b6e822e15cbcbd031d.tar.bz2 |
Improve diagnostic messages of "#pragma omp cancel", "#pragma omp cancellation point" parsing
gcc/c/
* c-parser.c (c_parser_pragma) <PRAGMA_OMP_CANCELLATION_POINT>:
Move pragma context checking into...
(c_parser_omp_cancellation_point): ... here, and improve
diagnostic messages.
* c-typeck.c (c_finish_omp_cancel)
(c_finish_omp_cancellation_point): Improve diagnostic messages.
gcc/cp/
* parser.c (cp_parser_pragma) <PRAGMA_OMP_CANCELLATION_POINT>:
Move pragma context checking into...
(cp_parser_omp_cancellation_point): ... here, and improve
diagnostic messages.
* semantics.c (finish_omp_cancel, finish_omp_cancellation_point):
Improve diagnostic messages.
gcc/testsuite/
* c-c++-common/gomp/cancel-1.c: Extend.
From-SVN: r237843
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cp/parser.c | 33 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 4 |
3 files changed, 28 insertions, 18 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 76b86a4..327391b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2016-06-29 Thomas Schwinge <thomas@codesourcery.com> + + * parser.c (cp_parser_pragma) <PRAGMA_OMP_CANCELLATION_POINT>: + Move pragma context checking into... + (cp_parser_omp_cancellation_point): ... here, and improve + diagnostic messages. + * semantics.c (finish_omp_cancel, finish_omp_cancellation_point): + Improve diagnostic messages. + 2016-06-28 Jakub Jelinek <jakub@redhat.com> * Make-lang.in: Don't cat ../stage_current if it does not exist. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 739fca0..3e8270e 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -34395,7 +34395,8 @@ cp_parser_omp_cancel (cp_parser *parser, cp_token *pragma_tok) | (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_TASKGROUP)) static void -cp_parser_omp_cancellation_point (cp_parser *parser, cp_token *pragma_tok) +cp_parser_omp_cancellation_point (cp_parser *parser, cp_token *pragma_tok, + enum pragma_context context) { tree clauses; bool point_seen = false; @@ -34414,7 +34415,19 @@ cp_parser_omp_cancellation_point (cp_parser *parser, cp_token *pragma_tok) if (!point_seen) { cp_parser_error (parser, "expected %<point%>"); - cp_parser_require_pragma_eol (parser, pragma_tok); + cp_parser_skip_to_pragma_eol (parser, pragma_tok); + return; + } + + if (context != pragma_compound) + { + if (context == pragma_stmt) + error_at (pragma_tok->location, + "%<#pragma omp cancellation point%> may only be used in" + " compound statements"); + else + cp_parser_error (parser, "expected declaration specifiers"); + cp_parser_skip_to_pragma_eol (parser, pragma_tok); return; } @@ -37291,20 +37304,8 @@ cp_parser_pragma (cp_parser *parser, enum pragma_context context, bool *if_p) break; case PRAGMA_OMP_CANCELLATION_POINT: - switch (context) - { - case pragma_compound: - cp_parser_omp_cancellation_point (parser, pragma_tok); - return false; - case pragma_stmt: - error_at (pragma_tok->location, - "%<#pragma omp cancellation point%> may only be " - "used in compound statements"); - break; - default: - goto bad_stmt; - } - break; + cp_parser_omp_cancellation_point (parser, pragma_tok, context); + return false; case PRAGMA_OMP_THREADPRIVATE: cp_parser_omp_threadprivate (parser, pragma_tok); diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index fa4698e..d1fb119 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -8571,7 +8571,7 @@ finish_omp_cancel (tree clauses) mask = 8; else { - error ("%<#pragma omp cancel must specify one of " + error ("%<#pragma omp cancel%> must specify one of " "%<parallel%>, %<for%>, %<sections%> or %<taskgroup%> clauses"); return; } @@ -8608,7 +8608,7 @@ finish_omp_cancellation_point (tree clauses) mask = 8; else { - error ("%<#pragma omp cancellation point must specify one of " + error ("%<#pragma omp cancellation point%> must specify one of " "%<parallel%>, %<for%>, %<sections%> or %<taskgroup%> clauses"); return; } |