]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
OpenMP: Improve error message for invalid directive in "assumes".
authorSandra Loosemore <sloosemore@baylibre.com>
Wed, 15 Jan 2025 17:22:53 +0000 (17:22 +0000)
committerSandra Loosemore <sloosemore@baylibre.com>
Thu, 16 Jan 2025 18:24:26 +0000 (18:24 +0000)
gcc/c/ChangeLog
* c-parser.cc (c_parser_omp_assumption_clauses): Give a more specific
error message for invalid directives vs unknown names.

gcc/cp/ChangeLog
* parser.cc (cp_parser_omp_assumption_clauses): Give a more specific
error message for invalid directives vs unknown names.

gcc/fortran/ChangeLog
* openmp.cc (gfc_omp_absent_contains_clause): Use an Oxford comma
in the message.

gcc/testsuite/ChangeLog
* c-c++-common/gomp/assume-2.c: Adjust expected diagnostics.
* c-c++-common/gomp/assumes-2.c: Likewise.
* c-c++-common/gomp/begin-assumes-2.c: Likewise.
* gfortran.dg/gomp/allocate-6.f90: Likewise.
* gfortran.dg/gomp/assumes-2.f90: Likewise.

gcc/c/c-parser.cc
gcc/cp/parser.cc
gcc/fortran/openmp.cc
gcc/testsuite/c-c++-common/gomp/assume-2.c
gcc/testsuite/c-c++-common/gomp/assumes-2.c
gcc/testsuite/c-c++-common/gomp/begin-assumes-2.c
gcc/testsuite/gfortran.dg/gomp/allocate-6.f90
gcc/testsuite/gfortran.dg/gomp/assumes-2.f90

index b45c7ef961f413a37157073eef3d0d91c614cc90..f193329099f5b0c53db695ecbfa729d8c9def74c 100644 (file)
@@ -28846,13 +28846,18 @@ c_parser_omp_assumption_clauses (c_parser *parser, bool is_assume)
                        = c_omp_categorize_directive (directive[0],
                                                      directive[1],
                                                      directive[2]);
-                     if (dir == NULL
-                         || dir->kind == C_OMP_DIR_DECLARATIVE
-                         || dir->kind == C_OMP_DIR_INFORMATIONAL
-                         || dir->kind == C_OMP_DIR_META
-                         || dir->id == PRAGMA_OMP_END
-                         || (!dir->second && directive[1])
-                         || (!dir->third && directive[2]))
+                     if (dir
+                         && (dir->kind == C_OMP_DIR_DECLARATIVE
+                             || dir->kind == C_OMP_DIR_INFORMATIONAL
+                             || dir->kind == C_OMP_DIR_META))
+                       error_at (dloc, "invalid OpenMP directive name in "
+                                       "%qs clause argument: declarative, "
+                                       "informational, and meta directives "
+                                       "not permitted", p);
+                     else if (dir == NULL
+                              || dir->id == PRAGMA_OMP_END
+                              || (!dir->second && directive[1])
+                              || (!dir->third && directive[2]))
                        error_at (dloc, "unknown OpenMP directive name in "
                                        "%qs clause argument", p);
                      else
index 74f4f7cd6d89197cd414d10e2444d28f6331e4f1..ba2c4dbb0538161660c546bdbcc481af63a872c4 100644 (file)
@@ -49887,10 +49887,15 @@ cp_parser_omp_assumption_clauses (cp_parser *parser, cp_token *pragma_tok,
                        = c_omp_categorize_directive (directive[0],
                                                      directive[1],
                                                      directive[2]);
-                     if (dir == NULL
-                         || dir->kind == C_OMP_DIR_DECLARATIVE
-                         || dir->kind == C_OMP_DIR_INFORMATIONAL
-                         || dir->kind == C_OMP_DIR_META
+                     if (dir
+                         && (dir->kind == C_OMP_DIR_DECLARATIVE
+                             || dir->kind == C_OMP_DIR_INFORMATIONAL
+                             || dir->kind == C_OMP_DIR_META))
+                       error_at (dloc, "invalid OpenMP directive name in "
+                                       "%qs clause argument: declarative, "
+                                       "informational, and meta directives "
+                                       "not permitted", p);
+                     else if (dir == NULL
                          || dir->id == PRAGMA_OMP_END
                          || (!dir->second && directive[1])
                          || (!dir->third && directive[2]))
index 0f1aaa021812d4d2f13837f1efda46e406410b86..e51ff1f4d29ed45d26721e6f1b03b8456f883ad1 100644 (file)
@@ -1620,7 +1620,7 @@ gfc_omp_absent_contains_clause (gfc_omp_assumptions **assume, bool is_absent)
          || kind == GFC_OMP_DIR_META)
        {
          gfc_error ("Invalid %qs directive at %L in %s clause: declarative, "
-                    "informational and meta directives not permitted",
+                    "informational, and meta directives not permitted",
                     gfc_ascii_statement (st, true), &old_loc,
                     is_absent ? "ABSENT" : "CONTAINS");
          return MATCH_ERROR;
index 47396055aef1df84e75397a595d023a734958b63..95a65fd06ceec8be4904123785c0cae851f867c6 100644 (file)
@@ -19,19 +19,19 @@ foo (int i, int *a)
   ;
   #pragma omp assume contains (target enter data, target exit data) absent (target enter data, parallel)       /* { dg-error "'target enter data' directive mentioned in both 'absent' and 'contains' clauses" } */
   ;
-  #pragma omp assume contains (declare target)                 /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
+  #pragma omp assume contains (declare target)                 /* { dg-error "invalid OpenMP directive name in 'contains' clause argument" } */
   ;
   #pragma omp assume absent (parallel for simd)                        /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
   ;
   #pragma omp assume contains (target parallel)                        /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
   ;
-  #pragma omp assume absent (assume)                           /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
+  #pragma omp assume absent (assume)                           /* { dg-error "invalid OpenMP directive name in 'absent' clause argument" } */
   ;
-  #pragma omp assume absent (assumes)                          /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
+  #pragma omp assume absent (assumes)                          /* { dg-error "invalid OpenMP directive name in 'absent' clause argument" } */
   ;
-  #pragma omp assume contains (begin assumes)                  /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
+  #pragma omp assume contains (begin assumes)                  /* { dg-error "invalid OpenMP directive name in 'contains' clause argument" } */
   ;
-  #pragma omp assume contains (end assumes)                    /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
+  #pragma omp assume contains (end assumes)                    /* { dg-error "invalid OpenMP directive name in 'contains' clause argument" } */
   ;
   #pragma omp assume contains (foo)                            /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
   ;
index 924f323d68f702d5ceb2227a751906c8ed28efc3..68b88bed9e43a0e565f78913b125ac4fa60a6a8d 100644 (file)
@@ -7,13 +7,13 @@
 #pragma omp assumes contains (target enter data, target exit data) contains (target exit data, parallel)       /* { dg-error "target exit data' directive mentioned multiple times in 'contains' clauses" } */
 #pragma omp assumes absent (target enter data, target exit data) contains (target exit data, parallel)         /* { dg-error "'target exit data' directive mentioned in both 'absent' and 'contains' clauses" } */
 #pragma omp assumes contains (target enter data, target exit data) absent (target enter data, parallel)        /* { dg-error "'target enter data' directive mentioned in both 'absent' and 'contains' clauses" } */
-#pragma omp assumes contains (declare target)                  /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
+#pragma omp assumes contains (declare target)                  /* { dg-error "invalid OpenMP directive name in 'contains' clause argument" } */
 #pragma omp assumes absent (parallel for simd)                 /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
 #pragma omp assumes contains (target parallel)                 /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
-#pragma omp assumes absent (assume)                            /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
-#pragma omp assumes absent (assumes)                           /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
-#pragma omp assumes contains (begin assumes)                   /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
-#pragma omp assumes contains (end assumes)                     /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
+#pragma omp assumes absent (assume)                            /* { dg-error "invalid OpenMP directive name in 'absent' clause argument" } */
+#pragma omp assumes absent (assumes)                           /* { dg-error "invalid OpenMP directive name in 'absent' clause argument" } */
+#pragma omp assumes contains (begin assumes)                   /* { dg-error "invalid OpenMP directive name in 'contains' clause argument" } */
+#pragma omp assumes contains (end assumes)                     /* { dg-error "invalid OpenMP directive name in 'contains' clause argument" } */
 #pragma omp assumes contains (foo)                             /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
 #pragma omp assumes absent (target enter something)            /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
 #pragma omp assumes foobar                                     /* { dg-error "expected assumption clause" } */
index 15dae6419338bdefdda5ddf134f2628c833ed70f..66b918078083d965e06ba5723dc83b6502a16eac 100644 (file)
@@ -25,7 +25,7 @@ void f8 (void) {}
 #pragma omp begin assumes contains (target enter data, target exit data) absent (target enter data, parallel)  /* { dg-error "'target enter data' directive mentioned in both 'absent' and 'contains' clauses" } */
 void f9 (void) {}
 #pragma omp end assumes
-#pragma omp begin assumes contains (declare target)                    /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
+#pragma omp begin assumes contains (declare target)                    /* { dg-error "invalid OpenMP directive name in 'contains' clause argument" } */
 void f10 (void) {}
 #pragma omp end assumes
 #pragma omp begin assumes absent (parallel for simd)                   /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
@@ -34,16 +34,16 @@ void f11 (void) {}
 #pragma omp begin assumes contains (target parallel)                   /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
 void f12 (void) {}
 #pragma omp end assumes
-#pragma omp begin assumes absent (assume)                              /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
+#pragma omp begin assumes absent (assume)                              /* { dg-error "invalid OpenMP directive name in 'absent' clause argument" } */
 void f13 (void) {}
 #pragma omp end assumes
-#pragma omp begin assumes absent (assumes)                             /* { dg-error "unknown OpenMP directive name in 'absent' clause argument" } */
+#pragma omp begin assumes absent (assumes)                             /* { dg-error "invalid OpenMP directive name in 'absent' clause argument" } */
 void f14 (void) {}
 #pragma omp end assumes
-#pragma omp begin assumes contains (begin assumes)                     /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
+#pragma omp begin assumes contains (begin assumes)                     /* { dg-error "invalid OpenMP directive name in 'contains' clause argument" } */
 void f15 (void) {}
 #pragma omp end assumes
-#pragma omp begin assumes contains (end assumes)                       /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
+#pragma omp begin assumes contains (end assumes)                       /* { dg-error "invalid OpenMP directive name in 'contains' clause argument" } */
 void f16 (void) {}
 #pragma omp end assumes
 #pragma omp begin assumes contains (foo)                               /* { dg-error "unknown OpenMP directive name in 'contains' clause argument" } */
index 73e5bbcf71b05580247363edf557d16879c91499..063431d3582a5390a876807685a9248284a32079 100644 (file)
@@ -30,9 +30,9 @@ module my_omp_lib
 end module my_omp_lib
 
 subroutine zero()
-  !$omp assumes absent (allocate)  ! { dg-error "Invalid 'ALLOCATE' directive at .1. in ABSENT clause: declarative, informational and meta directives not permitted" }
+  !$omp assumes absent (allocate)  ! { dg-error "Invalid 'ALLOCATE' directive at .1. in ABSENT clause: declarative, informational, and meta directives not permitted" }
 
-  !$omp assume absent (allocate)  ! { dg-error "Invalid 'ALLOCATE' directive at .1. in ABSENT clause: declarative, informational and meta directives not permitted" }
+  !$omp assume absent (allocate)  ! { dg-error "Invalid 'ALLOCATE' directive at .1. in ABSENT clause: declarative, informational, and meta directives not permitted" }
   !!$omp end assume
 end
 
index c8719a86a948945009aba95ca0b2fbbf8bf11d96..5694811b428925ec4a12f103b40cff59552c8a6a 100644 (file)
@@ -11,7 +11,7 @@ module m2
 interface
   subroutine foo
     !$omp assumes contains(target) contains(teams,target) ! { dg-error "'TARGET' directive mentioned multiple times in CONTAINS clause in !.OMP ASSUMES directive" }
-    !$omp assumes absent(declare target) ! { dg-error "Invalid 'DECLARE TARGET' directive at .1. in ABSENT clause: declarative, informational and meta directives not permitted" }
+    !$omp assumes absent(declare target) ! { dg-error "Invalid 'DECLARE TARGET' directive at .1. in ABSENT clause: declarative, informational, and meta directives not permitted" }
     !$omp assumes absent(parallel) absent(do,simd,parallel,distribute) ! { dg-error "'PARALLEL' directive mentioned multiple times in ABSENT clause in !.OMP ASSUMES directive" }
     !$omp assumes contains(barrier,atomic) absent(cancel,simd,atomic,distribute) ! { dg-error "'SIMD' directive mentioned both times in ABSENT and CONTAINS clauses in !.OMP ASSUMES directive" }
   end subroutine foo