aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2016-06-29 11:08:04 +0200
committerThomas Schwinge <tschwinge@gcc.gnu.org>2016-06-29 11:08:04 +0200
commit54d19c3b7fb38097973a57b6e822e15cbcbd031d (patch)
tree607bd431945a31016513565efdb3f36e5a571dfb /gcc/cp
parentf9d8d99478f3b02e55a69b166a70646c87a7f5cd (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/cp/parser.c33
-rw-r--r--gcc/cp/semantics.c4
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;
}