On Tue, Jun 28, 2016 at 02:19:13PM +0200, Thomas Schwinge wrote: > This also makes it obvious that stuff like: > > void foo() > { > if (0) > #pragma omp cancellation FOO > ; > } > > ... currently produces "wrong" ;-) diagnostics: > > ../omp.c: In function 'foo': > ../omp.c:4:9: error: '#pragma omp cancellation point' may only be used in > compound statements before '#pragma' > #pragma omp cancellation FOO > ^~~ > > We have in fact not yet parsed "#pragma omp cancellation point". I > corrected that. And the "before '#pragma'" also doesn't make sense in > that diagnostic message, so I switched that to use error_at instead of > c_parser_error/cp_parser_error (this remains to be fixed for other cases > in c_parser_pragma). And, for one diagnostic, C++ used > cp_parser_require_pragma_eol instead of cp_parser_skip_to_pragma_eol, > resulting in spurious "error: expected end of line before [...]" > diagnostics, also fixed. And, a few missing "%>" added. At that point, > I stopped looking for additional things to fix. ;-) > > OK for trunk?
This LGTM if you tweak it to apply without the previous patch or with just a patch for PRAGMA_OMP_DECLARE. Thanks. > commit 2e17681659f8f8ec1ce3419c6587e1ee569ee8bc > Author: Thomas Schwinge <tho...@codesourcery.com> > Date: Tue Jun 28 14:16:20 2016 +0200 > > Improve diagnostic messages of "#pragma omp cancel", "#pragma omp > cancellation point" parsing > > gcc/c/ > * c-parser.c (c_parser_pragma) <PRAGMA_OMP_CANCELLATION>: 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>: 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. Jakub