openmp: Reject requires directives not at file or namespace scope [PR94593]
authorJakub Jelinek <jakub@redhat.com>
Wed, 15 Apr 2020 07:59:14 +0000 (09:59 +0200)
committerJakub Jelinek <jakub@redhat.com>
Wed, 15 Apr 2020 07:59:14 +0000 (09:59 +0200)
commit2dc9294c3c7c81a6d5e1d4dedf58fea87bbadde6
treee5020dd979b8eb5897157a8c3adfd2ec55f78159
parente71b408aa242ffc76ffd19ebcdbd40279a1d9349
openmp: Reject requires directives not at file or namespace scope [PR94593]

This change started with a bugreport about a typo in one requires testcase
(diagnosed with -Wunknown-pragmas only), but following discussion lead to
noting that we do not diagnose restriction that requires directives in
C/C++ may only appear at file or namespace scope; and several our tests
violated that.

2020-04-15  Jakub Jelinek  <jakub@redhat.com>

PR c/94593
* c-parser.c (c_parser_pragma) <case PRAGMA_OMP_REQUIRES>: Reject
requires directive when not at file scope.

* parser.c (cp_parser_pragma) <case PRAGMA_OMP_REQUIRES>: Reject
requires directive when not at file or namespace scope.

* c-c++-common/gomp/requires-1.c: Fix a typo, requries -> requires.
Move directives to file scope.
(i): Remove.
* c-c++-common/gomp/requires-2.c: Move directives to file scope.
(i, foo): Remove.
* c-c++-common/gomp/requires-4.c: Move directives to file scope.
* c-c++-common/gomp/atomic-19.c: Move requires directive to file scope.
* c-c++-common/gomp/atomic-20.c: Likewise.
* c-c++-common/gomp/atomic-21.c: Likewise.
* c-c++-common/gomp/atomic-22.c: Likewise.
* gcc.dg/gomp/requires-1.c: New test.
* g++.dg/gomp/requires-1.C: New test.
* g++.dg/gomp/requires-2.C: New test.
* g++.dg/gomp/atomic-18.C: Move requires directive to file scope.
16 files changed:
gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/gomp/atomic-19.c
gcc/testsuite/c-c++-common/gomp/atomic-20.c
gcc/testsuite/c-c++-common/gomp/atomic-21.c
gcc/testsuite/c-c++-common/gomp/atomic-22.c
gcc/testsuite/c-c++-common/gomp/requires-1.c
gcc/testsuite/c-c++-common/gomp/requires-2.c
gcc/testsuite/c-c++-common/gomp/requires-4.c
gcc/testsuite/g++.dg/gomp/atomic-18.C
gcc/testsuite/g++.dg/gomp/requires-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/gomp/requires-2.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/gomp/requires-1.c [new file with mode: 0644]