llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: David Pagan (ddpagan)

<details>
<summary>Changes</summary>

Per OpenMP 6.0 specification, section 7.9.9

  Argument keywords, page 291, L17
  Additional information, page 291, L24-25
    24 The value alloc may also be specified as implicit-behavior with
    identical meaning to the value 25 storage.

Testing:
  Updated 'defaultmap' error message and codegen LIT tests to verify
  behavior in OpenMP 6.0.

---

Patch is 21.36 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/158336.diff


6 Files Affected:

- (modified) clang/docs/ReleaseNotes.rst (+1) 
- (modified) clang/include/clang/Basic/OpenMPKinds.def (+1) 
- (modified) clang/lib/Basic/OpenMPKinds.cpp (+7-3) 
- (modified) clang/lib/Sema/SemaOpenMP.cpp (+8-3) 
- (modified) clang/test/OpenMP/target_defaultmap_codegen_01.cpp (+10-2) 
- (modified) clang/test/OpenMP/target_defaultmap_messages.cpp (+18-12) 


``````````diff
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index e1e497ccdbccd..0538732b86983 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -511,6 +511,7 @@ OpenMP Support
 - Allow array length to be omitted in array section subscript expression.
 - Fixed non-contiguous strided update in the ``omp target update`` directive 
with the ``from`` clause.
 - Properly handle array section/assumed-size array privatization in C/C++.
+- Added support for ``defaultmap`` directive implicit-behavior ``storage``.
 
 Improvements
 ^^^^^^^^^^^^
diff --git a/clang/include/clang/Basic/OpenMPKinds.def 
b/clang/include/clang/Basic/OpenMPKinds.def
index 9d6f816eea91f..0cb9b01f05d1c 100644
--- a/clang/include/clang/Basic/OpenMPKinds.def
+++ b/clang/include/clang/Basic/OpenMPKinds.def
@@ -127,6 +127,7 @@ OPENMP_DEFAULTMAP_MODIFIER(firstprivate)
 OPENMP_DEFAULTMAP_MODIFIER(none)
 OPENMP_DEFAULTMAP_MODIFIER(default)
 OPENMP_DEFAULTMAP_MODIFIER(present)
+OPENMP_DEFAULTMAP_MODIFIER(storage)
 
 // Static attributes for 'depend' clause.
 OPENMP_DEPEND_KIND(in)
diff --git a/clang/lib/Basic/OpenMPKinds.cpp b/clang/lib/Basic/OpenMPKinds.cpp
index 3f8f64df8702e..2beeda30f12cf 100644
--- a/clang/lib/Basic/OpenMPKinds.cpp
+++ b/clang/lib/Basic/OpenMPKinds.cpp
@@ -90,14 +90,18 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind 
Kind, StringRef Str,
 #define OPENMP_DIST_SCHEDULE_KIND(Name) .Case(#Name, OMPC_DIST_SCHEDULE_##Name)
 #include "clang/Basic/OpenMPKinds.def"
         .Default(OMPC_DIST_SCHEDULE_unknown);
-  case OMPC_defaultmap:
-    return llvm::StringSwitch<unsigned>(Str)
+  case OMPC_defaultmap: {
+    unsigned Type = llvm::StringSwitch<unsigned>(Str)
 #define OPENMP_DEFAULTMAP_KIND(Name)                                           
\
   .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_##Name))
 #define OPENMP_DEFAULTMAP_MODIFIER(Name)                                       
\
   .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_MODIFIER_##Name))
 #include "clang/Basic/OpenMPKinds.def"
-        .Default(OMPC_DEFAULTMAP_unknown);
+                        .Default(OMPC_DEFAULTMAP_unknown);
+    if (LangOpts.OpenMP < 60 && Type == OMPC_DEFAULTMAP_MODIFIER_storage)
+      return OMPC_DEFAULTMAP_MODIFIER_unknown;
+    return Type;
+  }
   case OMPC_atomic_default_mem_order:
      return llvm::StringSwitch<OpenMPAtomicDefaultMemOrderClauseKind>(Str)
 #define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name)       \
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 63a56a6583efc..af369e0356daa 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -804,7 +804,8 @@ class DSAStackTy {
              (M == OMPC_DEFAULTMAP_MODIFIER_to) ||
              (M == OMPC_DEFAULTMAP_MODIFIER_from) ||
              (M == OMPC_DEFAULTMAP_MODIFIER_tofrom) ||
-             (M == OMPC_DEFAULTMAP_MODIFIER_present);
+             (M == OMPC_DEFAULTMAP_MODIFIER_present) ||
+             (M == OMPC_DEFAULTMAP_MODIFIER_storage);
     }
     return true;
   }
@@ -3686,6 +3687,7 @@ 
getMapClauseKindFromModifier(OpenMPDefaultmapClauseModifier M,
   OpenMPMapClauseKind Kind = OMPC_MAP_unknown;
   switch (M) {
   case OMPC_DEFAULTMAP_MODIFIER_alloc:
+  case OMPC_DEFAULTMAP_MODIFIER_storage:
     Kind = OMPC_MAP_alloc;
     break;
   case OMPC_DEFAULTMAP_MODIFIER_to:
@@ -23025,8 +23027,11 @@ OMPClause *SemaOpenMP::ActOnOpenMPDefaultmapClause(
         }
       } else {
         StringRef ModifierValue =
-            "'alloc', 'from', 'to', 'tofrom', "
-            "'firstprivate', 'none', 'default', 'present'";
+            getLangOpts().OpenMP < 60
+                ? "'alloc', 'from', 'to', 'tofrom', "
+                  "'firstprivate', 'none', 'default', 'present'"
+                : "'storage', 'from', 'to', 'tofrom', "
+                  "'firstprivate', 'none', 'default', 'present'";
         if (!isDefaultmapKind && isDefaultmapModifier) {
           Diag(KindLoc, diag::err_omp_unexpected_clause_value)
               << KindValue << getOpenMPClauseNameForDiag(OMPC_defaultmap);
diff --git a/clang/test/OpenMP/target_defaultmap_codegen_01.cpp 
b/clang/test/OpenMP/target_defaultmap_codegen_01.cpp
index ce862632dd940..0936aa08e21e7 100644
--- a/clang/test/OpenMP/target_defaultmap_codegen_01.cpp
+++ b/clang/test/OpenMP/target_defaultmap_codegen_01.cpp
@@ -6,6 +6,8 @@
 
 
///==========================================================================///
 // RUN: %clang_cc1 -no-enable-noundef-analysis -DCK1 -verify -Wno-vla -fopenmp 
-fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple 
powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck 
-allow-deprecated-dag-overlap  %s --check-prefix CK1
+// Verify implicit-behavior 'storage' as alias for 'alloc' in OpenMP 6.0
+// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK1 -DOMP6 -verify -Wno-vla 
-fopenmp -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ 
-triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck 
-allow-deprecated-dag-overlap  %s --check-prefix CK1
 // RUN: %clang_cc1 -no-enable-noundef-analysis -DCK1 -fopenmp 
-fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple 
powerpc64le-unknown-unknown -emit-pch -o %t %s
 // RUN: %clang_cc1 -no-enable-noundef-analysis -fopenmp 
-fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple 
powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify -Wno-vla %s 
-emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix 
CK1
 // RUN: %clang_cc1 -no-enable-noundef-analysis -DCK1 -verify -Wno-vla -fopenmp 
-fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown 
-emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  %s  
--check-prefix CK1
@@ -43,8 +45,12 @@ void implicit_maps_double_complex (int a){
 // CK1-DAG: store ptr [[PTR]], ptr [[P1]]
 
 // CK1: call void [[KERNEL:@.+]](ptr [[PTR]])
-#pragma omp target defaultmap(alloc \
-                              : scalar)
+#ifdef OMP6
+// 'storage' is an alias for 'alloc' in OpenMP 6.0
+#pragma omp target defaultmap(storage : scalar)
+#else
+#pragma omp target defaultmap(alloc : scalar)
+#endif // OMP6
   {
    dc *= dc;
   }
@@ -235,6 +241,8 @@ void implicit_maps_double (int a){
 #endif
 
///==========================================================================///
 // RUN: %clang_cc1 -no-enable-noundef-analysis -DCK5 -verify -Wno-vla  
-fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple 
powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck 
-allow-deprecated-dag-overlap  %s --check-prefix CK5
+// Verify implicit-behavior 'alloc' still accepted in OpenMP 6.0
+// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK5 -verify -Wno-vla  
-fopenmp -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ 
-triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck 
-allow-deprecated-dag-overlap  %s --check-prefix CK5
 // RUN: %clang_cc1 -no-enable-noundef-analysis -DCK5 -fopenmp 
-fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple 
powerpc64le-unknown-unknown -emit-pch -o %t %s
 // RUN: %clang_cc1 -no-enable-noundef-analysis -fopenmp 
-fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple 
powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify -Wno-vla  %s 
-emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix 
CK5
 // RUN: %clang_cc1 -no-enable-noundef-analysis -DCK5 -verify -Wno-vla  
-fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown 
-emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  %s  
--check-prefix CK5
diff --git a/clang/test/OpenMP/target_defaultmap_messages.cpp 
b/clang/test/OpenMP/target_defaultmap_messages.cpp
index 88ae3b7962d55..7675d22df7be6 100644
--- a/clang/test/OpenMP/target_defaultmap_messages.cpp
+++ b/clang/test/OpenMP/target_defaultmap_messages.cpp
@@ -1,5 +1,8 @@
-// RUN: %clang_cc1 -verify -Wno-vla -fopenmp %s -fopenmp-version=52 
-verify=expected,omp5x,omp52 -Wuninitialized
-// RUN: %clang_cc1 -verify -Wno-vla -fopenmp-simd %s -fopenmp-version=52 
-verify=expected,omp5x,omp52 -Wuninitialized
+// RUN: %clang_cc1 -verify -Wno-vla -fopenmp %s -fopenmp-version=60 
-verify=expected,omp-ge52,omp60 -Wuninitialized
+// RUN: %clang_cc1 -verify -Wno-vla -fopenmp-simd %s -fopenmp-version=60 
-verify=expected,omp-ge52,omp60 -Wuninitialized
+
+// RUN: %clang_cc1 -verify -Wno-vla -fopenmp %s -fopenmp-version=52 
-verify=expected,omp5x,omp-ge52 -Wuninitialized
+// RUN: %clang_cc1 -verify -Wno-vla -fopenmp-simd %s -fopenmp-version=52 
-verify=expected,omp5x,omp-ge52 -Wuninitialized
 
 // RUN: %clang_cc1 -verify -Wno-vla -fopenmp %s -fopenmp-version=51 
-verify=expected,omp5x,omp51 -Wuninitialized -DOMP51
 // RUN: %clang_cc1 -verify -Wno-vla -fopenmp-simd %s -fopenmp-version=51 
-verify=expected,omp5x,omp51 -Wuninitialized -DOMP51
@@ -33,23 +36,23 @@ template <class T, typename S, int N, int ST>
 T tmain(T argc, S **argv) {
   #pragma omp target defaultmap // expected-error {{expected '(' after 
'defaultmap'}}
   foo();
-#pragma omp target defaultmap( // omp5x-error {{expected 'alloc', 'from', 
'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP clause 
'defaultmap'}} omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default' in OpenMP clause 'defaultmap'}} 
expected-error {{expected ')'}} expected-note {{to match this '('}} omp45-error 
{{expected 'tofrom' in OpenMP clause 'defaultmap'}}
+#pragma omp target defaultmap( // omp60-error {{expected 'storage', 'from', 
'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP clause 
'defaultmap'}} omp5x-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default', 'present' in OpenMP clause 'defaultmap'}} 
omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 'firstprivate', 'none', 
'default' in OpenMP clause 'defaultmap'}} expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp45-error {{expected 'tofrom' in OpenMP 
clause 'defaultmap'}}
   foo();
-#pragma omp target defaultmap() // omp5x-error {{expected 'alloc', 'from', 
'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP clause 
'defaultmap'}} omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default' in OpenMP clause 'defaultmap'}} omp45-error 
{{expected 'tofrom' in OpenMP clause 'defaultmap'}}
+#pragma omp target defaultmap() // omp60-error {{expected 'storage', 'from', 
'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP clause 
'defaultmap'}} omp5x-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default', 'present' in OpenMP clause 'defaultmap'}} 
omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 'firstprivate', 'none', 
'default' in OpenMP clause 'defaultmap'}} omp45-error {{expected 'tofrom' in 
OpenMP clause 'defaultmap'}}
   foo();
 #pragma omp target defaultmap(tofrom // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp45-warning {{missing ':' after 
defaultmap modifier - ignoring}} omp45-error {{expected 'scalar' in OpenMP 
clause 'defaultmap'}}
   foo();
-  #pragma omp target defaultmap (tofrom: // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp52-error {{expected 'scalar', 
'aggregate', 'pointer', 'all' in OpenMP clause 'defaultmap'}} omp51-error 
{{expected 'scalar', 'aggregate', 'pointer' in OpenMP clause 'defaultmap'}} 
omp5-error {{expected 'scalar', 'aggregate', 'pointer' in OpenMP clause 
'defaultmap'}} omp45-error {{expected 'scalar' in OpenMP clause 'defaultmap'}} 
+  #pragma omp target defaultmap (tofrom: // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp-ge52-error {{expected 'scalar', 
'aggregate', 'pointer', 'all' in OpenMP clause 'defaultmap'}} omp51-error 
{{expected 'scalar', 'aggregate', 'pointer' in OpenMP clause 'defaultmap'}} 
omp5-error {{expected 'scalar', 'aggregate', 'pointer' in OpenMP clause 
'defaultmap'}} omp45-error {{expected 'scalar' in OpenMP clause 'defaultmap'}} 
   foo();
 #pragma omp target defaultmap(tofrom) // omp45-warning {{missing ':' after 
defaultmap modifier - ignoring}} omp45-error {{expected 'scalar' in OpenMP 
clause 'defaultmap'}}
   foo();
 #pragma omp target defaultmap(tofrom, // expected-error {{expected ')'}} 
omp45-warning {{missing ':' after defaultmap modifier - ignoring}} 
expected-note {{to match this '('}} omp45-error {{expected 'scalar' in OpenMP 
clause 'defaultmap'}}
   foo();
-  #pragma omp target defaultmap (scalar: // omp5x-error {{expected 'alloc', 
'from', 'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP 
clause 'defaultmap'}} omp52-error {{expected 'scalar', 'aggregate', 'pointer', 
'all' in OpenMP clause 'defaultmap'}} omp51-error {{expected 'scalar', 
'aggregate', 'pointer' in OpenMP clause 'defaultmap'}} omp5-error {{expected 
'scalar', 'aggregate', 'pointer' in OpenMP clause 'defaultmap'}} expected-error 
{{expected ')'}} omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default' in OpenMP clause 'defaultmap'}} expected-note 
{{to match this '('}} omp45-error {{expected 'tofrom' in OpenMP clause 
'defaultmap'}}
+  #pragma omp target defaultmap (scalar: // omp60-error {{expected 'storage', 
'from', 'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP 
clause 'defaultmap'}} omp5x-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default', 'present' in OpenMP clause 'defaultmap'}} 
omp-ge52-error {{expected 'scalar', 'aggregate', 'pointer', 'all' in OpenMP 
clause 'defaultmap'}} omp51-error {{expected 'scalar', 'aggregate', 'pointer' 
in OpenMP clause 'defaultmap'}} omp5-error {{expected 'scalar', 'aggregate', 
'pointer' in OpenMP clause 'defaultmap'}} expected-error {{expected ')'}} 
omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 'firstprivate', 'none', 
'default' in OpenMP clause 'defaultmap'}} expected-note {{to match this '('}} 
omp45-error {{expected 'tofrom' in OpenMP clause 'defaultmap'}}
   foo();
 #pragma omp target defaultmap(tofrom, scalar // expected-error {{expected 
')'}} omp45-warning {{missing ':' after defaultmap modifier - ignoring}} 
expected-note {{to match this '('}} omp45-error {{expected 'scalar' in OpenMP 
clause 'defaultmap'}}
   foo();
-  #pragma omp target defaultmap(tofrom:scalar) defaultmap(tofrom:scalar) // 
omp45-error {{directive '#pragma omp target' cannot contain more than one 
'defaultmap' clause}} omp5-error {{at most one defaultmap clause for each 
variable-category can appear on the directive}} omp5x-error {{at most one 
defaultmap clause for each variable-category can appear on the directive}}
+  #pragma omp target defaultmap(tofrom:scalar) defaultmap(tofrom:scalar) // 
omp45-error {{directive '#pragma omp target' cannot contain more than one 
'defaultmap' clause}} omp5-error {{at most one defaultmap clause for each 
variable-category can appear on the directive}} omp5x-error {{at most one 
defaultmap clause for each variable-category can appear on the directive}} 
omp60-error {{at most one defaultmap clause for each variable-category can 
appear on the directive}}
 
   foo();
 
@@ -96,23 +99,26 @@ T tmain(T argc, S **argv) {
 int main(int argc, char **argv) {
 #pragma omp target defaultmap // expected-error {{expected '(' after 
'defaultmap'}}
   foo();
-#pragma omp target defaultmap( // omp5x-error {{expected 'alloc', 'from', 
'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP clause 
'defaultmap'}} omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default' in OpenMP clause 'defaultmap'}} 
expected-error {{expected ')'}} expected-note {{to match this '('}} omp45-error 
{{expected 'tofrom' in OpenMP clause 'defaultmap'}}
+#pragma omp target defaultmap( // omp60-error {{expected 'storage', 'from', 
'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP clause 
'defaultmap'}} omp5x-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default', 'present' in OpenMP clause 'defaultmap'}} 
omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 'firstprivate', 'none', 
'default' in OpenMP clause 'defaultmap'}} expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp45-error {{expected 'tofrom' in OpenMP 
clause 'defaultmap'}}
   foo();
-#pragma omp target defaultmap() // omp5x-error {{expected 'alloc', 'from', 
'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP clause 
'defaultmap'}} omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default' in OpenMP clause 'defaultmap'}} omp45-error 
{{expected 'tofrom' in OpenMP clause 'defaultmap'}}
+#pragma omp target defaultmap() // omp60-error {{expected 'storage', 'from', 
'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP clause 
'defaultmap'}} omp5x-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default', 'present' in OpenMP clause 'defaultmap'}} 
omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 'firstprivate', 'none', 
'default' in OpenMP clause 'defaultmap'}} omp45-error {{expected 'tofrom' in 
OpenMP clause 'defaultmap'}}
   foo();
 #pragma omp target defaultmap(tofrom // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp45-warning {{missing ':' after 
defaultmap modifier - ignoring}} omp45-error {{expected 'scalar' in OpenMP 
clause 'defaultmap'}}
   foo();
-#pragma omp target defaultmap(tofrom: // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp52-error {{expected 'scalar', 
'aggregate', 'pointer', 'all' in OpenMP clause 'defaultmap'}} omp51-error 
{{expected 'scalar', 'aggregate', 'pointer' in OpenMP clause 'defaultmap'}} 
omp5-error {{expected 'scalar', 'aggregate', 'pointer' in OpenMP clause 
'defaultmap'}} omp45-error {{expected 'scalar' in OpenMP clause 'defaultmap'}}
+#pragma omp target defaultmap(tofrom: // expected-error {{expected ')'}} 
expected-note {{to match this '('}} omp-ge52-error {{expected 'scalar', 
'aggregate', 'pointer', 'all' in OpenMP clause 'defaultmap'}} omp51-error 
{{expected 'scalar', 'aggregate', 'pointer' in OpenMP clause 'defaultmap'}} 
omp5-error {{expected 'scalar', 'aggregate', 'pointer' in OpenMP clause 
'defaultmap'}} omp45-error {{expected 'scalar' in OpenMP clause 'defaultmap'}}
   foo();
 #pragma omp target defaultmap(tofrom) // omp45-warning {{missing ':' after 
defaultmap modifier - ignoring}} omp45-error {{expected 'scalar' in OpenMP 
clause 'defaultmap'}}
   foo();
 #pragma omp target defaultmap(tofrom, // expected-error {{expected ')'}} 
omp45-warning {{missing ':' after defaultmap modifier - ignoring}} 
expected-note {{to match this '('}} omp45-error {{expected 'scalar' in OpenMP 
clause 'defaultmap'}}
   foo();
-#pragma omp target defaultmap(scalar: // omp5x-error {{expected 'alloc', 
'from', 'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP 
clause 'defaultmap'}} omp52-error {{expected 'scalar', 'aggregate', 'pointer', 
'all' in OpenMP clause 'defaultmap'}} omp51-error {{expected 'scalar', 
'aggregate', 'pointer' in OpenMP clause 'defaultmap'}} omp5-error {{expected 
'scalar', 'aggregate', 'pointer' in OpenMP clause 'defaultmap'}} expected-error 
{{expected ')'}} omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default' in OpenMP clause 'defaultmap'}} expected-note 
{{to match this '('}} omp45-error {{expected 'tofrom' in OpenMP clause 
'defaultmap'}}
+#pragma omp target defaultmap(scalar: // omp60-error {{expected 'storage', 
'from', 'to', 'tofrom', 'firstprivate', 'none', 'default', 'present' in OpenMP 
clause 'defaultmap'}} omp5x-error {{expected 'alloc', 'from', 'to', 'tofrom', 
'firstprivate', 'none', 'default', 'present' in OpenMP clause 'defaultmap'}} 
omp-ge52-error {{expected 'scalar', 'aggregate', 'pointer', 'all' in OpenMP 
clause 'defaultmap'}} omp51-error {{expected 'scalar', 'aggregate', 'pointer' 
in OpenMP clause 'defaultmap'}} omp5-error {{expected 'scalar', 'aggregate', 
'pointer' in OpenMP clause 'defaultmap'}} expected-error {{expected ')'}} 
omp5-error {{expected 'alloc', 'from', 'to', 'tofrom', 'firstprivate', 'none', 
'default' in OpenMP clause 'defaultmap'}} expected-note {{to match this '('}} 
omp45-error {{expected 'tofrom' in OpenMP clause 'defaultmap'}}
   foo();
 #pragma omp target defaultmap(tofrom, scalar // expected-error {{expected 
')'}} omp45-warning {{missing ':' after defaultmap modifier - ignoring}} 
expected-note {{to ma...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/158336
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to