c-parser.c (c_parser_omp_declare_simd): Reject declare simd in pragma_stmt context.
authorJakub Jelinek <jakub@redhat.com>
Thu, 23 Nov 2017 20:17:29 +0000 (21:17 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 23 Nov 2017 20:17:29 +0000 (21:17 +0100)
* c-parser.c (c_parser_omp_declare_simd): Reject declare simd in
pragma_stmt context.

* gcc.dg/gomp/declare-simd-1.c (f9): Remove.
* gcc.dg/gomp/declare-simd-5.c: New test.

From-SVN: r255116

gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/gomp/declare-simd-1.c
gcc/testsuite/gcc.dg/gomp/declare-simd-5.c [new file with mode: 0644]

index 1d71829d919899011ba8ad4ab8b8c4138f5d56c6..1d698508131bef58632546847b15a464105bc68a 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-23  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-parser.c (c_parser_omp_declare_simd): Reject declare simd in
+       pragma_stmt context.
+
 2017-11-23  Mike Stump  <mikestump@comcast.net>
            Eric Botcazou  <ebotcazou@adacore.com>
 
index 7eb0f5625188bd1071bf425330af8fe92fb2db74..9a6685a6744da7332942e2d99769e0d6bccc80f2 100644 (file)
@@ -17486,11 +17486,11 @@ c_parser_omp_declare_simd (c_parser *parser, enum pragma_context context)
       break;
     case pragma_struct:
     case pragma_param:
+    case pragma_stmt:
       c_parser_error (parser, "%<#pragma omp declare simd%> must be followed by "
                              "function declaration or definition");
       break;
     case pragma_compound:
-    case pragma_stmt:
       if (c_parser_next_token_is (parser, CPP_KEYWORD)
          && c_parser_peek_token (parser)->keyword == RID_EXTENSION)
        {
index de4941c3ae9dd16c6d939077e219729b664d482c..619e9593bb3f9b1639958ce8d56dff13b65ef5f0 100644 (file)
@@ -1,5 +1,8 @@
 2017-11-23  Jakub Jelinek  <jakub@redhat.com>
 
+       * gcc.dg/gomp/declare-simd-1.c (f9): Remove.
+       * gcc.dg/gomp/declare-simd-5.c: New test.
+
        * g++.dg/pr65240-1.C: Add -Wno-return-type to dg-options.
        * g++.dg/pr65240-2.C: Likewise.
        * g++.dg/pr65240-3.C: Likewise.
index 5022fbbc057ec4fc56d6348591f64c3294f3c315..b8bba1f892b6d1fb6885a47f4b7ef78f7caba7ef 100644 (file)
@@ -58,18 +58,6 @@ f7 (int x)
 /* { dg-final { scan-assembler-times "_ZGVeM16v_f7:" 1 { target { i?86-*-* x86_64-*-* } } } } */
 /* { dg-final { scan-assembler-times "_ZGVeN16v_f7:" 1 { target { i?86-*-* x86_64-*-* } } } } */
 
-int
-f9 (int x)
-{
-  if (x)
-    #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int))
-    extern int f10 (int a, int *b, int c);
-  while (x < 10)
-    #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int))
-    extern int f11 (int a, int *b, int c);
-  return x;
-}
-
 #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
 int f12 (int c; int *b; int a; int a, int *b, int c);
 
diff --git a/gcc/testsuite/gcc.dg/gomp/declare-simd-5.c b/gcc/testsuite/gcc.dg/gomp/declare-simd-5.c
new file mode 100644 (file)
index 0000000..fe23652
--- /dev/null
@@ -0,0 +1,35 @@
+/* Test parsing of #pragma omp declare simd */
+/* { dg-do compile } */
+
+int
+f1 (int x)
+{
+  if (x)
+    #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int))
+    extern int f3 (int a, int *b, int c);      /* { dg-error "must be followed by function declaration or definition" } */
+  while (x < 10)
+    #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int))
+    extern int f4 (int a, int *b, int c);      /* { dg-error "must be followed by function declaration or definition" } */
+  {
+lab:
+    #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int))
+    extern int f5 (int a, int *b, int c);      /* { dg-error "must be followed by function declaration or definition" } */
+    x++;                                       /* { dg-error "expected expression before" "" { target *-*-* } .-1 } */
+  }
+  return x;
+}
+
+int
+f2 (int x)
+{
+  if (x)
+    extern int f6 (int a, int *b, int c);      /* { dg-error "expected expression before" } */
+  while (x < 10)
+    extern int f7 (int a, int *b, int c);      /* { dg-error "expected expression before" } */
+  {
+lab:
+    extern int f8 (int a, int *b, int c);      /* { dg-error "a label can only be part of a statement and a declaration is not a statement" } */
+    x++;
+  }
+  return x;
+}