Author: CHANDRA GHALE
Date: 2025-08-28T13:21:31+05:30
New Revision: 96b44a101cfbf208dd7acc02e5e1216178748637

URL: 
https://github.com/llvm/llvm-project/commit/96b44a101cfbf208dd7acc02e5e1216178748637
DIFF: 
https://github.com/llvm/llvm-project/commit/96b44a101cfbf208dd7acc02e5e1216178748637.diff

LOG: Openmp 6.0 allow default clause on the target directive (#154942)

Sections 7.5.1 default Clause in OpenMP 6.0. Allow default clause on the
target directive.

---------

Co-authored-by: Chandra Ghale <gh...@pe31.hpc.amslabs.hpecorp.net>

Added: 
    clang/test/OpenMP/target_default_ast.cpp
    clang/test/OpenMP/target_default_messages.cpp

Modified: 
    llvm/include/llvm/Frontend/OpenMP/OMP.td

Removed: 
    


################################################################################
diff  --git a/clang/test/OpenMP/target_default_ast.cpp 
b/clang/test/OpenMP/target_default_ast.cpp
new file mode 100644
index 0000000000000..73bc8e525e29b
--- /dev/null
+++ b/clang/test/OpenMP/target_default_ast.cpp
@@ -0,0 +1,81 @@
+// expected-no-diagnostics
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
+//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
+//RUN:   -ast-print %s | FileCheck %s --check-prefix=PRINT
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
+//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
+//RUN:   -ast-dump %s | FileCheck %s --check-prefix=DUMP
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
+//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
+//RUN:   -emit-pch -o %t %s
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
+//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
+//RUN:   -include-pch %t -ast-print %s | FileCheck %s --check-prefix=PRINT
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
+//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
+//RUN:   -include-pch %t -ast-dump-all %s | FileCheck %s --check-prefix=DUMP
+
+#ifndef HEADER
+#define HEADER
+
+void foo() {
+  int a;
+#pragma omp target default(firstprivate)
+  a++;
+  // PRINT: #pragma omp target default(firstprivate)
+  // PRINT-NEXT: a++;
+  // DUMP: -OMPTargetDirective
+  // DUMP-NEXT:  -OMPDefaultClause
+  // DUMP-NEXT:  -OMPFirstprivateClause {{.*}} <implicit>
+  // DUMP-NEXT:   -DeclRefExpr {{.*}} 'a'
+
+}
+void fun(){
+int a = 0;
+    int x = 10;
+    #pragma omp target data default(firstprivate) map(a)
+    {
+  // DUMP: -OMPTargetDataDirective
+  // DUMP-NEXT: -OMPDefaultClause
+  // DUMP-NEXT: -OMPMapClause
+  // DUMP-NEXT:  -DeclRefExpr {{.*}} 'a'
+  // DUMP-NEXT: -OMPFirstprivateClause {{.*}} <implicit>
+  // DUMP-NEXT:  -DeclRefExpr {{.*}} 'x'
+
+
+        x += 10;
+        a += 1;
+    }
+}
+void bar(){
+int i = 0;
+int j = 0;
+int  nn = 10;
+#pragma omp target default(firstprivate)
+#pragma omp teams 
+#pragma teams distribute parallel for simd 
+        for (j = 0; j < nn; j++ ) {
+          for (i = 0; i < nn; i++ ) {
+                ;
+          }
+        }
+
+  // PRINT: #pragma omp target default(firstprivate)
+  // DUMP: -OMPTargetDirective
+  // DUMP-NEXT: -OMPDefaultClause
+  // DUMP-NEXT: -OMPFirstprivateClause {{.*}} <implicit>
+  // DUMP-NEXT: -DeclRefExpr {{.*}} 'j'
+  // DUMP-NEXT: -DeclRefExpr {{.*}} 'nn'
+  // DUMP-NEXT: -DeclRefExpr {{.*}} 'i'
+}
+#endif

diff  --git a/clang/test/OpenMP/target_default_messages.cpp 
b/clang/test/OpenMP/target_default_messages.cpp
new file mode 100644
index 0000000000000..be677dffa21ca
--- /dev/null
+++ b/clang/test/OpenMP/target_default_messages.cpp
@@ -0,0 +1,51 @@
+
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -DOMP60 %s 
-Wuninitialized
+
+// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -DOMP60 %s 
-Wuninitialized
+
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=52 -DOMP52 %s 
-Wuninitialized
+
+void foo();
+
+namespace {
+static int y = 0;
+}
+static int x = 0;
+
+int main(int argc, char **argv) {
+#ifdef OMP60
+  #pragma omp target default // expected-error {{expected '(' after 'default'}}
+  for (int i=0; i<200; i++) foo();
+#pragma omp target  default( // expected-error {{expected 'none', 'shared', 
'private' or 'firstprivate' in OpenMP clause 'default'}} expected-error 
{{expected ')'}} expected-note {{to match this '('}}
+  for (int i=0; i<200; i++) foo();
+#pragma omp target default() // expected-error {{expected 'none', 'shared', 
'private' or 'firstprivate' in OpenMP clause 'default'}}
+  for (int i=0; i<200; i++) foo();
+  #pragma omp target default (none // expected-error {{expected ')'}} 
expected-note {{to match this '('}}
+  for (int i=0; i<200; i++) foo();
+#pragma omp target  default(x) // expected-error {{expected 'none', 'shared', 
'private' or 'firstprivate' in OpenMP clause 'default'}}
+  for (int i=0; i<200; i++) foo();
+#endif 
+
+#ifdef OMP52
+#pragma omp target default(firstprivate) // expected-error {{unexpected OpenMP 
clause 'default' in directive '#pragma omp target'}}
+  for (int i = 0; i < 200; i++) {
+    ++x;
+    ++y;
+  }
+#pragma omp target default(private) // expected-error {{unexpected OpenMP 
clause 'default' in directive '#pragma omp target'}}
+  for (int i = 0; i < 200; i++) {
+    ++x;
+    ++y;
+  }
+
+int j = 0, i = 0, nn = 10;
+#pragma omp target teams distribute simd default(shared) // expected-error 
{{unexpected OpenMP clause 'default' in directive '#pragma omp target teams 
distribute simd'}}
+       for (j = 0; j < nn; j++ ) {
+         for (i = 0; i < nn; i++ ) {
+               ;
+         }
+       }
+#endif 
+ 
+  return 0;
+}

diff  --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td 
b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index 1f1d7d06b4269..6a193c774f661 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -1112,6 +1112,7 @@ def OMP_Target : Directive<[Spelling<"target">]> {
     VersionedClause<OMPC_OMPX_Attribute>,
     VersionedClause<OMPC_Private>,
     VersionedClause<OMPC_UsesAllocators, 50>,
+    VersionedClause<OMPC_Default, 60>,
   ];
   let allowedOnceClauses = [
     VersionedClause<OMPC_DefaultMap>,
@@ -1130,6 +1131,7 @@ def OMP_TargetData : Directive<[Spelling<"target data", 
1, 52>,
   let allowedOnceClauses = [
     VersionedClause<OMPC_Device>,
     VersionedClause<OMPC_If>,
+    VersionedClause<OMPC_Default, 60>,
   ];
   let requiredClauses = [
     VersionedClause<OMPC_Map>,
@@ -2474,6 +2476,7 @@ def OMP_TargetTeamsDistributeSimd
     VersionedClause<OMPC_Reduction>,
     VersionedClause<OMPC_Shared>,
     VersionedClause<OMPC_UsesAllocators, 50>,
+    VersionedClause<OMPC_Default, 60>,
   ];
   let allowedOnceClauses = [
     VersionedClause<OMPC_Collapse>,


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

Reply via email to