https://github.com/ravurvi20 updated 
https://github.com/llvm/llvm-project/pull/125648

>From 189dd3cc2230ea5752969f02f119b6ee30e3df69 Mon Sep 17 00:00:00 2001
From: Urvi Rav <urvi.ra...@gmail.com>
Date: Tue, 4 Feb 2025 01:35:41 -0600
Subject: [PATCH 1/2] default clause replaced by otherwise clause for
 metadirective

---
 .../clang/Basic/DiagnosticParseKinds.td       |  4 ++++
 clang/lib/Parse/ParseOpenMP.cpp               | 15 ++++++++++++++
 clang/test/OpenMP/metadirective_ast_print.c   | 20 +++++++++----------
 .../metadirective_device_arch_codegen.cpp     |  2 +-
 .../metadirective_device_isa_codegen.cpp      |  4 ++--
 ...etadirective_device_isa_codegen_amdgcn.cpp |  4 ++--
 .../metadirective_device_kind_codegen.c       |  2 +-
 .../metadirective_device_kind_codegen.cpp     |  2 +-
 clang/test/OpenMP/metadirective_empty.cpp     |  4 ++--
 .../metadirective_implementation_codegen.c    | 12 +++++------
 .../metadirective_implementation_codegen.cpp  | 12 +++++------
 clang/test/OpenMP/metadirective_messages.cpp  | 12 +++++++----
 12 files changed, 58 insertions(+), 35 deletions(-)

diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td 
b/clang/include/clang/Basic/DiagnosticParseKinds.td
index c513dab810d1f5..4b8449e9ee9b62 100644
--- a/clang/include/clang/Basic/DiagnosticParseKinds.td
+++ b/clang/include/clang/Basic/DiagnosticParseKinds.td
@@ -1657,6 +1657,10 @@ def err_omp_expected_colon : Error<"missing ':' in %0">;
 def err_omp_missing_comma : Error< "missing ',' after %0">;
 def err_omp_expected_context_selector
     : Error<"expected valid context selector in %0">;
+def err_omp_unknown_clause
+    : Error<"unknown clause '%0' in %1">;
+def warn_omp_default_deprecated : Warning<"'default' clause for"
+  " 'metadirective' is deprecated; use 'otherwise' instead">, 
InGroup<Deprecated>;
 def err_omp_requires_out_inout_depend_type : Error<
   "reserved locator 'omp_all_memory' requires 'out' or 'inout' "
   "dependency types">;
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp
index 89b83938f352df..673806ef28b9fc 100644
--- a/clang/lib/Parse/ParseOpenMP.cpp
+++ b/clang/lib/Parse/ParseOpenMP.cpp
@@ -2743,6 +2743,15 @@ StmtResult 
Parser::ParseOpenMPDeclarativeOrExecutableDirective(
       OpenMPClauseKind CKind = Tok.isAnnotation()
                                    ? OMPC_unknown
                                    : getOpenMPClauseKind(PP.getSpelling(Tok));
+      // Check if the clause is unrecognized.
+      if (CKind == OMPC_unknown) {
+        Diag(Tok, diag::err_omp_unknown_clause)
+        << PP.getSpelling(Tok) << "metadirective";
+        return Directive;
+      }
+      if(CKind == OMPC_default) {
+        Diag(Tok, diag::warn_omp_default_deprecated);
+      }
       SourceLocation Loc = ConsumeToken();
 
       // Parse '('.
@@ -2769,6 +2778,12 @@ StmtResult 
Parser::ParseOpenMPDeclarativeOrExecutableDirective(
           return Directive;
         }
       }
+      if (CKind == OMPC_otherwise) {
+        // Check for 'otherwise' keyword.
+        if (Tok.is(tok::identifier) && Tok.getIdentifierInfo()->getName() == 
"otherwise") {
+        ConsumeToken();  // Consume 'otherwise'
+        }
+      }
       // Skip Directive for now. We will parse directive in the second 
iteration
       int paren = 0;
       while (Tok.isNot(tok::r_paren) || paren != 0) {
diff --git a/clang/test/OpenMP/metadirective_ast_print.c 
b/clang/test/OpenMP/metadirective_ast_print.c
index d9ff7e76452160..28efaac5949427 100644
--- a/clang/test/OpenMP/metadirective_ast_print.c
+++ b/clang/test/OpenMP/metadirective_ast_print.c
@@ -15,18 +15,18 @@ void bar(void);
 #define N 10
 void foo(void) {
 #pragma omp metadirective when(device = {kind(cpu)} \
-                               : parallel) default()
+                               : parallel) otherwise()
   bar();
 #pragma omp metadirective when(implementation = {vendor(score(0)  \
                                                         : llvm)}, \
                                device = {kind(cpu)}               \
-                               : parallel) default(target teams)
+                               : parallel) otherwise(target teams)
   bar();
 #pragma omp metadirective when(device = {kind(gpu)}                            
     \
                                : target teams) when(implementation = 
{vendor(llvm)} \
-                                                    : parallel) default()
+                                                    : parallel) otherwise()
   bar();
-#pragma omp metadirective default(target) when(implementation = 
{vendor(score(5)  \
+#pragma omp metadirective otherwise(target) when(implementation = 
{vendor(score(5)  \
                                                                         : 
llvm)}, \
                                                device = {kind(cpu, host)}      
   \
                                                : parallel)
@@ -40,15 +40,15 @@ void foo(void) {
   for (int i = 0; i < 100; i++)
     ;
 #pragma omp metadirective when(implementation = {extension(match_all)} \
-                               : parallel) default(parallel for)
+                               : parallel) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 #pragma omp metadirective when(implementation = {extension(match_any)} \
-                               : parallel) default(parallel for)
+                               : parallel) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 #pragma omp metadirective when(implementation = {extension(match_none)} \
-                               : parallel) default(parallel for)
+                               : parallel) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 
@@ -64,17 +64,17 @@ void foo(void) {
 
 #pragma omp metadirective when(device={arch("amdgcn")}: \
                                 teams distribute parallel for)\
-                                default(parallel for)
+                                otherwise(parallel for)
   for (int i = 0; i < 100; i++)
   ;
 
 #pragma omp metadirective when(implementation = {extension(match_all)} \
-                               : nothing) default(parallel for)
+                               : nothing) otherwise(parallel for)
   for (int i = 0; i < 16; i++)
     ;
 
 #pragma omp metadirective when(implementation = {extension(match_any)} \
-                               : parallel) default(nothing)
+                               : parallel) otherwise(nothing)
   for (int i = 0; i < 16; i++)
     ;
 }
diff --git a/clang/test/OpenMP/metadirective_device_arch_codegen.cpp 
b/clang/test/OpenMP/metadirective_device_arch_codegen.cpp
index eecae310d0a778..c44337b33d5b39 100644
--- a/clang/test/OpenMP/metadirective_device_arch_codegen.cpp
+++ b/clang/test/OpenMP/metadirective_device_arch_codegen.cpp
@@ -27,7 +27,7 @@ int metadirective1() {
    {
       #pragma omp metadirective \
                    when(device={arch("amdgcn")}: teams distribute parallel 
for) \
-                   default(parallel for)
+                   otherwise(parallel for)
 
          for (int i = 0; i < N; i++) {
            #pragma omp atomic write
diff --git a/clang/test/OpenMP/metadirective_device_isa_codegen.cpp 
b/clang/test/OpenMP/metadirective_device_isa_codegen.cpp
index 1d098063101d7e..1b9829f7a56cef 100644
--- a/clang/test/OpenMP/metadirective_device_isa_codegen.cpp
+++ b/clang/test/OpenMP/metadirective_device_isa_codegen.cpp
@@ -8,7 +8,7 @@ void bar();
 
 void x86_64_device_isa_selected() {
 #pragma omp metadirective when(device = {isa("sse2")} \
-                               : parallel) default(single)
+                               : parallel) otherwise(single)
   bar();
 }
 // CHECK-LABEL: void @_Z26x86_64_device_isa_selectedv()
@@ -21,7 +21,7 @@ void x86_64_device_isa_selected() {
 
 void x86_64_device_isa_not_selected() {
 #pragma omp metadirective when(device = {isa("some-unsupported-feature")} \
-                               : parallel) default(single)
+                               : parallel) otherwise(single)
   bar();
 }
 // CHECK-LABEL: void @_Z30x86_64_device_isa_not_selectedv()
diff --git a/clang/test/OpenMP/metadirective_device_isa_codegen_amdgcn.cpp 
b/clang/test/OpenMP/metadirective_device_isa_codegen_amdgcn.cpp
index cbb75c4a68376a..c2c7b72a8469fd 100644
--- a/clang/test/OpenMP/metadirective_device_isa_codegen_amdgcn.cpp
+++ b/clang/test/OpenMP/metadirective_device_isa_codegen_amdgcn.cpp
@@ -15,7 +15,7 @@ int amdgcn_device_isa_selected() {
   {
 #pragma omp metadirective                     \
     when(device = {isa("dpp")} \
-         : parallel) default(single)
+         : parallel) otherwise(single)
     threadCount++;
   }
 
@@ -38,7 +38,7 @@ int amdgcn_device_isa_not_selected() {
     when(device = {isa("sse")}                                 \
          : parallel)                                           \
         when(device = {isa("another-unsupported-gpu-feature")} \
-             : parallel) default(single)
+             : parallel) otherwise(single)
     threadCount++;
   }
 
diff --git a/clang/test/OpenMP/metadirective_device_kind_codegen.c 
b/clang/test/OpenMP/metadirective_device_kind_codegen.c
index f77f50426a16d4..0a8c54af2effd1 100644
--- a/clang/test/OpenMP/metadirective_device_kind_codegen.c
+++ b/clang/test/OpenMP/metadirective_device_kind_codegen.c
@@ -30,7 +30,7 @@ void foo(void) {
                                : parallel)
   bar();
 #pragma omp metadirective when(device = {kind(gpu)} \
-                               : target parallel for) default(parallel for)
+                               : target parallel for) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 }
diff --git a/clang/test/OpenMP/metadirective_device_kind_codegen.cpp 
b/clang/test/OpenMP/metadirective_device_kind_codegen.cpp
index bfbfec8b27e1e8..446fd646ef17fc 100644
--- a/clang/test/OpenMP/metadirective_device_kind_codegen.cpp
+++ b/clang/test/OpenMP/metadirective_device_kind_codegen.cpp
@@ -31,7 +31,7 @@ void foo() {
                                : parallel)
   bar();
 #pragma omp metadirective when(device = {kind(gpu)} \
-                               : target parallel for) default(parallel for)
+                               : target parallel for) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 }
diff --git a/clang/test/OpenMP/metadirective_empty.cpp 
b/clang/test/OpenMP/metadirective_empty.cpp
index b93ed722cb6e90..9fcd35e82292d9 100644
--- a/clang/test/OpenMP/metadirective_empty.cpp
+++ b/clang/test/OpenMP/metadirective_empty.cpp
@@ -11,12 +11,12 @@ void func() {
   // Test where a valid when clause contains empty directive.
   // The directive will be ignored and code for a serial for loop will be 
generated.
 #pragma omp metadirective when(implementation = {vendor(llvm)} \
-                               :) default(parallel for)
+                               :) otherwise(parallel for)
   for (int i = 0; i < N; i++)
     ;
 
 #pragma omp metadirective when(implementation = {vendor(llvm)} \
-                               :nothing) default(parallel for)
+                               :nothing) otherwise(parallel for)
   for (int i = 0; i < N; i++)
     ;
 }
diff --git a/clang/test/OpenMP/metadirective_implementation_codegen.c 
b/clang/test/OpenMP/metadirective_implementation_codegen.c
index da09b639d6d409..dc0bcbaebd0992 100644
--- a/clang/test/OpenMP/metadirective_implementation_codegen.c
+++ b/clang/test/OpenMP/metadirective_implementation_codegen.c
@@ -12,27 +12,27 @@ void foo(void) {
 #pragma omp metadirective when(implementation = {vendor(score(0)  \
                                                         : llvm)}, \
                                device = {kind(cpu)}               \
-                               : parallel) default(target teams)
+                               : parallel) otherwise(target teams)
   bar();
 #pragma omp metadirective when(device = {kind(gpu)}                            
     \
                                : target teams) when(implementation = 
{vendor(llvm)} \
-                                                    : parallel) default()
+                                                    : parallel) otherwise()
   bar();
-#pragma omp metadirective default(target) when(implementation = 
{vendor(score(5)  \
+#pragma omp metadirective otherwise(target) when(implementation = 
{vendor(score(5)  \
                                                                         : 
llvm)}, \
                                                device = {kind(cpu, host)}      
   \
                                                : parallel)
   bar();
 #pragma omp metadirective when(implementation = {extension(match_all)} \
-                               : parallel) default(parallel for)
+                               : parallel) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 #pragma omp metadirective when(implementation = {extension(match_any)} \
-                               : parallel) default(parallel for)
+                               : parallel) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 #pragma omp metadirective when(implementation = {extension(match_none)} \
-                               : parallel) default(parallel for)
+                               : parallel) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 }
diff --git a/clang/test/OpenMP/metadirective_implementation_codegen.cpp 
b/clang/test/OpenMP/metadirective_implementation_codegen.cpp
index b9f43d1a1e87cd..a20b2e2f14bcd4 100644
--- a/clang/test/OpenMP/metadirective_implementation_codegen.cpp
+++ b/clang/test/OpenMP/metadirective_implementation_codegen.cpp
@@ -12,27 +12,27 @@ void foo() {
 #pragma omp metadirective when(implementation = {vendor(score(0)  \
                                                         : llvm)}, \
                                device = {kind(cpu)}               \
-                               : parallel) default(target teams)
+                               : parallel) otherwise(target teams)
   bar();
 #pragma omp metadirective when(device = {kind(gpu)}                            
     \
                                : target teams) when(implementation = 
{vendor(llvm)} \
-                                                    : parallel) default()
+                                                    : parallel) otherwise()
   bar();
-#pragma omp metadirective default(target) when(implementation = 
{vendor(score(5)  \
+#pragma omp metadirective otherwise(target) when(implementation = 
{vendor(score(5)  \
                                                                         : 
llvm)}, \
                                                device = {kind(cpu, host)}      
   \
                                                : parallel)
   bar();
 #pragma omp metadirective when(implementation = {extension(match_all)} \
-                               : parallel) default(parallel for)
+                               : parallel) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 #pragma omp metadirective when(implementation = {extension(match_any)} \
-                               : parallel) default(parallel for)
+                               : parallel) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 #pragma omp metadirective when(implementation = {extension(match_none)} \
-                               : parallel) default(parallel for)
+                               : parallel) otherwise(parallel for)
   for (int i = 0; i < 100; i++)
     ;
 }
diff --git a/clang/test/OpenMP/metadirective_messages.cpp 
b/clang/test/OpenMP/metadirective_messages.cpp
index b342a094a7870a..8a32b36c016d6e 100644
--- a/clang/test/OpenMP/metadirective_messages.cpp
+++ b/clang/test/OpenMP/metadirective_messages.cpp
@@ -11,12 +11,16 @@ void foo() {
   ;
 #pragma omp metadirective when(device{arch(nvptx)}) // expected-error 
{{missing ':' in when clause}} expected-error {{expected expression}} 
expected-warning {{expected '=' after the context set name "device"; '=' 
assumed}}
   ;
-#pragma omp metadirective when(device{arch(nvptx)}: ) default() // 
expected-warning {{expected '=' after the context set name "device"; '=' 
assumed}}
+#pragma omp metadirective when(device{arch(nvptx)}: ) otherwise() // 
expected-warning {{expected '=' after the context set name "device"; '=' 
assumed}}
   ;
-#pragma omp metadirective when(device = {arch(nvptx)} : ) default(xyz) // 
expected-error {{expected an OpenMP directive}} expected-error {{use of 
undeclared identifier 'xyz'}}
+#pragma omp metadirective when(device = {arch(nvptx)} : ) otherwise(xyz) // 
expected-error {{expected an OpenMP directive}} expected-error {{use of 
undeclared identifier 'xyz'}}
   ;
-#pragma omp metadirective when(device = {arch(nvptx)} : parallel default() // 
expected-error {{expected ',' or ')' in 'when' clause}} expected-error 
{{expected expression}}
+#pragma omp metadirective when(device = {arch(nvptx)} : parallel otherwise() 
// expected-error {{expected ',' or ')' in 'when' clause}} expected-error 
{{expected expression}}
   ;
-#pragma omp metadirective when(device = {isa("some-unsupported-feature")} : 
parallel) default(single) // expected-warning {{isa trait 
'some-unsupported-feature' is not known to the current target; verify the 
spelling or consider restricting the context selector with the 'arch' selector 
further}}
+#pragma omp metadirective when(device = {isa("some-unsupported-feature")} : 
parallel) otherwise(single) // expected-warning {{isa trait 
'some-unsupported-feature' is not known to the current target; verify the 
spelling or consider restricting the context selector with the 'arch' selector 
further}}
+  ;
+#pragma omp metadirective when(device = {arch(nvptx)} : parallel) default() // 
expected-warning {{'default' clause for 'metadirective' is deprecated; use 
'otherwise' instead}}
+  ;
+#pragma omp metadirective when(device = {arch(nvptx)} : parallel) xyz() 
//expected-error {{unknown clause 'xyz' in metadirective}} expected-error {{use 
of undeclared identifier 'xyz'}} expected-error {{expected expression}} 
expected-error {{expected ';' after expression}}
   ;
 }

>From be152cbebf2b5be802f4d98b1639a1ab84194e07 Mon Sep 17 00:00:00 2001
From: Urvi Rav <urvi.ra...@gmail.com>
Date: Tue, 4 Feb 2025 21:10:21 -0600
Subject: [PATCH 2/2] changes in uknown clause error

---
 clang/lib/Parse/ParseOpenMP.cpp              | 1 -
 clang/test/OpenMP/metadirective_messages.cpp | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp
index 673806ef28b9fc..a0f4a2c7a220f4 100644
--- a/clang/lib/Parse/ParseOpenMP.cpp
+++ b/clang/lib/Parse/ParseOpenMP.cpp
@@ -2747,7 +2747,6 @@ StmtResult 
Parser::ParseOpenMPDeclarativeOrExecutableDirective(
       if (CKind == OMPC_unknown) {
         Diag(Tok, diag::err_omp_unknown_clause)
         << PP.getSpelling(Tok) << "metadirective";
-        return Directive;
       }
       if(CKind == OMPC_default) {
         Diag(Tok, diag::warn_omp_default_deprecated);
diff --git a/clang/test/OpenMP/metadirective_messages.cpp 
b/clang/test/OpenMP/metadirective_messages.cpp
index 8a32b36c016d6e..955bc70e0b9660 100644
--- a/clang/test/OpenMP/metadirective_messages.cpp
+++ b/clang/test/OpenMP/metadirective_messages.cpp
@@ -21,6 +21,6 @@ void foo() {
   ;
 #pragma omp metadirective when(device = {arch(nvptx)} : parallel) default() // 
expected-warning {{'default' clause for 'metadirective' is deprecated; use 
'otherwise' instead}}
   ;
-#pragma omp metadirective when(device = {arch(nvptx)} : parallel) xyz() 
//expected-error {{unknown clause 'xyz' in metadirective}} expected-error {{use 
of undeclared identifier 'xyz'}} expected-error {{expected expression}} 
expected-error {{expected ';' after expression}}
+#pragma omp metadirective when(device = {arch(nvptx)} : parallel) xyz() 
//expected-error {{unknown clause 'xyz' in metadirective}} 
   ;
 }

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to