https://github.com/kparzysz updated 
https://github.com/llvm/llvm-project/pull/141772

>From e9dc0bebc958f62dec8d4cda38d8187e8675d474 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <krzysztof.parzys...@amd.com>
Date: Wed, 28 May 2025 09:20:00 -0500
Subject: [PATCH 1/6] [OpenMP] Add directive spellings introduced in spec v6.0

For background information see
https://discourse.llvm.org/t/rfc-alternative-spellings-of-openmp-directives/85507
---
 llvm/include/llvm/Frontend/OpenMP/OMP.td | 30 ++++++++++++++++--------
 1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td 
b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index 027692275b63b..04433ffd72b7b 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -677,7 +677,8 @@ def OMP_Cancel : Directive<[Spelling<"cancel">]> {
   let association = AS_None;
   let category = CA_Executable;
 }
-def OMP_CancellationPoint : Directive<[Spelling<"cancellation point">]> {
+def OMP_CancellationPoint : Directive<[Spelling<"cancellation point", 1, 52>,
+                                       Spelling<"cancellation_point", 60>]> {
   let allowedOnceClauses = [
     VersionedClause<OMPC_CancellationConstructType>,
   ];
@@ -691,21 +692,24 @@ def OMP_Critical : Directive<[Spelling<"critical">]> {
   let association = AS_Block;
   let category = CA_Executable;
 }
-def OMP_DeclareMapper : Directive<[Spelling<"declare mapper">]> {
+def OMP_DeclareMapper : Directive<[Spelling<"declare mapper", 1, 52>,
+                                   Spelling<"declare_mapper", 60>]> {
   let requiredClauses = [
     VersionedClause<OMPC_Map, 45>,
   ];
   let association = AS_None;
   let category = CA_Declarative;
 }
-def OMP_DeclareReduction : Directive<[Spelling<"declare reduction">]> {
+def OMP_DeclareReduction : Directive<[Spelling<"declare reduction", 1, 52>,
+                                      Spelling<"declare_reduction", 60>]> {
   let allowedOnceClauses = [
     VersionedClause<OMPC_Initializer>,
   ];
   let association = AS_None;
   let category = CA_Declarative;
 }
-def OMP_DeclareSimd : Directive<[Spelling<"declare simd">]> {
+def OMP_DeclareSimd : Directive<[Spelling<"declare simd", 1, 52>,
+                                 Spelling<"declare_simd", 60>]> {
   let allowedClauses = [
     VersionedClause<OMPC_Aligned>,
     VersionedClause<OMPC_Linear>,
@@ -721,7 +725,8 @@ def OMP_DeclareSimd : Directive<[Spelling<"declare simd">]> 
{
   let association = AS_Declaration;
   let category = CA_Declarative;
 }
-def OMP_DeclareTarget : Directive<[Spelling<"declare target">]> {
+def OMP_DeclareTarget : Directive<[Spelling<"declare target", 1, 52>,
+                                   Spelling<"declare_target", 60>]> {
   let allowedClauses = [
     VersionedClause<OMPC_Enter, 52>,
     VersionedClause<OMPC_Indirect>,
@@ -734,7 +739,8 @@ def OMP_DeclareTarget : Directive<[Spelling<"declare 
target">]> {
   let association = AS_None;
   let category = CA_Declarative;
 }
-def OMP_DeclareVariant : Directive<[Spelling<"declare variant">]> {
+def OMP_DeclareVariant : Directive<[Spelling<"declare variant", 1, 52>,
+                                    Spelling<"declare_variant", 60>]> {
   let allowedClauses = [
     VersionedClause<OMPC_AdjustArgs, 51>,
   ];
@@ -1093,7 +1099,8 @@ def OMP_Target : Directive<[Spelling<"target">]> {
   let association = AS_Block;
   let category = CA_Executable;
 }
-def OMP_TargetData : Directive<[Spelling<"target data">]> {
+def OMP_TargetData : Directive<[Spelling<"target data", 1, 52>,
+                                Spelling<"target_data", 60>]> {
   let allowedOnceClauses = [
     VersionedClause<OMPC_Device>,
     VersionedClause<OMPC_If>,
@@ -1106,7 +1113,8 @@ def OMP_TargetData : Directive<[Spelling<"target data">]> 
{
   let association = AS_Block;
   let category = CA_Executable;
 }
-def OMP_TargetEnterData : Directive<[Spelling<"target enter data">]> {
+def OMP_TargetEnterData : Directive<[Spelling<"target enter data", 1, 52>,
+                                     Spelling<"target_enter_data", 60>]> {
   let allowedClauses = [
     VersionedClause<OMPC_Depend>,
   ];
@@ -1121,7 +1129,8 @@ def OMP_TargetEnterData : Directive<[Spelling<"target 
enter data">]> {
   let association = AS_None;
   let category = CA_Executable;
 }
-def OMP_TargetExitData : Directive<[Spelling<"target exit data">]> {
+def OMP_TargetExitData : Directive<[Spelling<"target exit data", 1, 52>,
+                                    Spelling<"target_exit_data", 60>]> {
   let allowedClauses = [
     VersionedClause<OMPC_Depend>,
   ];
@@ -1136,7 +1145,8 @@ def OMP_TargetExitData : Directive<[Spelling<"target exit 
data">]> {
   let association = AS_None;
   let category = CA_Executable;
 }
-def OMP_TargetUpdate : Directive<[Spelling<"target update">]> {
+def OMP_TargetUpdate : Directive<[Spelling<"target update", 1, 52>,
+                                  Spelling<"target_update", 60>]> {
   let allowedClauses = [
     VersionedClause<OMPC_Depend>,
     VersionedClause<OMPC_From>,

>From 3250e4e080e77c5ac84738cd75342d21e166081c Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <krzysztof.parzys...@amd.com>
Date: Mon, 9 Jun 2025 17:53:42 -0500
Subject: [PATCH 2/6] More directives

---
 llvm/include/llvm/Frontend/OpenMP/OMP.td | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td 
b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index 04433ffd72b7b..c6fe4842cf403 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -643,7 +643,8 @@ def OMP_EndAssumes : Directive<[Spelling<"end assumes">]> {
   let category = OMP_BeginAssumes.category;
   let languages = OMP_BeginAssumes.languages;
 }
-def OMP_BeginDeclareTarget : Directive<[Spelling<"begin declare target">]> {
+def OMP_BeginDeclareTarget : Directive<[Spelling<"begin declare target", 1, 
52>,
+                                        Spelling<"begin declare_target", 60>]> 
{
   let allowedClauses = [
     VersionedClause<OMPC_DeviceType>,
     VersionedClause<OMPC_Indirect>,
@@ -654,17 +655,21 @@ def OMP_BeginDeclareTarget : Directive<[Spelling<"begin 
declare target">]> {
   let category = CA_Declarative;
   let languages = [L_C];
 }
-def OMP_EndDeclareTarget : Directive<[Spelling<"end declare target">]> {
+def OMP_EndDeclareTarget : Directive<[Spelling<"end declare target", 1, 52>,
+                                      Spelling<"end declare_target", 60>]> {
   let association = AS_Delimited;
   let category = OMP_BeginDeclareTarget.category;
   let languages = OMP_BeginDeclareTarget.languages;
 }
-def OMP_BeginDeclareVariant : Directive<[Spelling<"begin declare variant">]> {
+def OMP_BeginDeclareVariant
+    : Directive<[Spelling<"begin declare variant", 1, 52>,
+                 Spelling<"begin declare_variant", 60>]> {
   let association = AS_Delimited;
   let category = CA_Declarative;
   let languages = [L_C];
 }
-def OMP_EndDeclareVariant : Directive<[Spelling<"end declare variant">]> {
+def OMP_EndDeclareVariant : Directive<[Spelling<"end declare variant", 1, 52>,
+                                       Spelling<"end declare_variant", 60>]> {
   let association = AS_Delimited;
   let category = OMP_BeginDeclareVariant.category;
   let languages = OMP_BeginDeclareVariant.languages;

>From b33d5d31541b80b1b69d3976d7092cd40c58591f Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <krzysztof.parzys...@amd.com>
Date: Mon, 9 Jun 2025 17:53:53 -0500
Subject: [PATCH 3/6] Fix testcase

---
 clang/test/OpenMP/declare_target_messages.cpp | 106 +++++++++++-------
 1 file changed, 64 insertions(+), 42 deletions(-)

diff --git a/clang/test/OpenMP/declare_target_messages.cpp 
b/clang/test/OpenMP/declare_target_messages.cpp
index 3c0e766cf72ca..4aa4d686eaaf3 100644
--- a/clang/test/OpenMP/declare_target_messages.cpp
+++ b/clang/test/OpenMP/declare_target_messages.cpp
@@ -11,14 +11,14 @@
 
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp45,omp45-to-51,omp45-to-51-var,omp45-to-51-clause,omp45-to-51-clause
  %{openmp45} %{limit} -o - %s
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host5,host-5-and-51,no-host5-and-51
  %{openmp50} %{target_mac} %{limit} -o - %s
-// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var  %{openmp60} 
%{target_mac} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var  
%{openmp60} %{target_mac} %{limit} -o - %s
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51,dev5
  %{openmp50} -fopenmp-is-target-device %{target_mac} %{aux_triple} %{limit} -o 
- %s
-// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} 
-fopenmp-is-target-device %{target_mac} %{aux_triple} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var 
%{openmp60} -fopenmp-is-target-device %{target_mac} %{aux_triple} %{limit} -o - 
%s
 
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host5,host-5-and-51,no-host5-and-51
 %{openmp50_simd} %{target_mac} %{limit} -o - %s
-// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60_simd} 
%{target_mac} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var 
%{openmp60_simd} %{target_mac} %{limit} -o - %s
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host5,host-5-and-51,no-host5-and-51
 %{openmp50_simd} -fopenmp-is-target-device %{target_mac} %{limit} -o - %s
-// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60_simd} 
-fopenmp-is-target-device %{target_mac} %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var 
%{openmp60_simd} -fopenmp-is-target-device %{target_mac} %{limit} -o - %s
 
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp45,omp45-to-51,omp45-to-51-var,omp45-to-51-clause 
-fopenmp-version=45 -fopenmp-simd %{limit} -o - %s
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51
 -fopenmp %{limit} -o - %s
@@ -26,12 +26,12 @@
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51
 -fopenmp %{limit} -I%S/Inputs -DTESTENDINC=1 -o - %s
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51
 -fopenmp-simd %{limit} -o - %s
 
-// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp52} 
-DVERBOSE_MODE=1 %{limit} -o - %s
-// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} 
-DVERBOSE_MODE=1 %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp52,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var 
%{openmp52} -DVERBOSE_MODE=1 %{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var 
%{openmp60} -DVERBOSE_MODE=1 %{limit} -o - %s
 
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp5,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51
 %{openmp50} %{limit} -o - %s
 // RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp51,ompvar,omp45-to-51,omp5-and-51,omp5-or-later,omp5-or-later-var,omp45-to-51-var,omp45-to-51-clause,host-5-and-51,no-host5-and-51
 -fopenmp %{limit} -o - %s
-// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp52,ompvar,omp5-or-later,omp5-or-later-var %{openmp60} 
%{limit} -o - %s
+// RUN: %clang_cc1 %{common_opts_mac} 
-verify=expected,omp60,omp52-or-later,ompvar,omp5-or-later,omp5-or-later-var 
%{openmp60} %{limit} -o - %s
 
 #pragma omp begin declare target
 static int gg;
@@ -39,7 +39,9 @@ static int gg;
 int recursive = recursive ^ 3 + gg;
 #pragma omp end declare target
 
-// expected-error@+1 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
+// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end 
declare_target'}}
+// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
+// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
 #pragma omp end declare target 
 
 // ompvar-error@+1 {{variable captured in declare target region must appear in 
a to clause}}
@@ -47,14 +49,20 @@ int a, b, z;
 // expected-note@+1 {{defined as threadprivate or thread local}}
 __thread int t;
 
-// expected-error@+1 {{expected '(' after 'declare target'}}
+// omp60-error@+3 {{expected '(' after 'declare_target'}}
+// omp52-error@+2 {{expected '(' after 'declare target'}}
+// omp45-to-51-error@+1 {{expected '(' after 'declare target'}}
 #pragma omp declare target . 
 
 #pragma omp declare target
 void f();
-// expected-warning@+1 {{extra tokens at the end of '#pragma omp end declare 
target' are ignored}}
+// omp60-warning@+3 {{extra tokens at the end of '#pragma omp end 
declare_target' are ignored}}
+// omp52-warning@+2 {{extra tokens at the end of '#pragma omp end declare 
target' are ignored}}
+// omp45-to-51-warning@+1 {{extra tokens at the end of '#pragma omp end 
declare target' are ignored}}
 #pragma omp end declare target shared(a) 
 
+// omp60-error@+10 {{unexpected 'map' clause, only 'enter', 'link', 
'device_type' or 'indirect' clauses expected}}
+// omp60-error@+9 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
 // omp52-error@+8 {{unexpected 'map' clause, only 'enter', 'link', 
'device_type' or 'indirect' clauses expected}}
 // omp52-error@+7 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
 // omp51-error@+6 {{unexpected 'map' clause, only 'to', 'link', 'device_type' 
or 'indirect' clauses expected}} 
@@ -65,6 +73,8 @@ void f();
 // omp45-error@+1 {{expected at least one 'to' or 'link' clause}} 
 #pragma omp declare target map(a)
 
+// omp60-error@+5 {{unexpected 'to' clause, use 'enter' instead}}
+// omp60-error@+4 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
 // omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
 // omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
 // omp45-to-51-error@+1 {{use of undeclared identifier 'foo1'}}
@@ -73,6 +83,8 @@ void f();
 // expected-error@+1 {{use of undeclared identifier 'foo2'}}
 #pragma omp declare target link(foo2) 
 
+// omp60-error@+6 {{unexpected 'to' clause, use 'enter' instead}}
+// omp60-error@+5 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
 // omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
 // omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
 // dev5-note@+2 {{marked as 'device_type(host)' here}}
@@ -80,8 +92,8 @@ void f();
 #pragma omp declare target to(f) device_type(host)
 
 void q();
-// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 // omp5-and-51-warning@+2 {{more than one 'device_type' clause is specified}}
 // omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
 #pragma omp declare target to(q) device_type(any) device_type(any) 
device_type(host) 
@@ -121,7 +133,7 @@ void c();
 // expected-note@+1 {{'func' defined here}}
 void func() {} 
 
-// omp52-error@+5 {{unexpected 'allocate' clause, only 'enter', 'link', 
'device_type' or 'indirect' clauses expected}}
+// omp52-or-later-error@+5 {{unexpected 'allocate' clause, only 'enter', 
'link', 'device_type' or 'indirect' clauses expected}}
 // omp51-error@+4 {{unexpected 'allocate' clause, only 'to', 'link', 
'device_type' or 'indirect' clauses expected}}
 // omp5-error@+3 {{unexpected 'allocate' clause, only 'to', 'link' or 
'device_type' clauses expected}}
 // expected-error@+2 {{function name is not allowed in 'link' clause}}
@@ -171,7 +183,9 @@ void t2() {
   void abc();
 #pragma omp end declare target
 void cba();
-// expected-error@+1 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
+// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end 
declare_target'}}
+// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
+// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
 #pragma omp end declare target 
 
 #pragma omp declare target
@@ -234,7 +248,9 @@ void foo1() {
 
 #pragma omp end declare target
 #pragma omp end declare target
-// expected-error@+1 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
+// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end 
declare_target'}}
+// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
+// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
 #pragma omp end declare target 
 
 int C::method() {
@@ -255,18 +271,22 @@ int *y;
 int **w = &y;
 int main (int argc, char **argv) {
   int a = 2;
-// expected-error@+1 {{unexpected OpenMP directive '#pragma omp declare 
target'}}
+// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp declare_target'}}
+// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp declare target'}}
+// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp declare 
target'}}
 #pragma omp declare target 
   int v;
-// expected-error@+1 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
+// omp60-error@+3 {{unexpected OpenMP directive '#pragma omp end 
declare_target'}}
+// omp52-error@+2 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
+// omp45-to-51-error@+1 {{unexpected OpenMP directive '#pragma omp end declare 
target'}}
 #pragma omp end declare target 
   foo(v);
 
-  // omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
-  // omp52-error@+1 {{unexpected 'to' clause, use 'enter' instead}}
+  // omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
+  // omp52-or-later-error@+1 {{unexpected 'to' clause, use 'enter' instead}}
 #pragma omp declare target to(foo3) link(w)
-  // omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
-  // omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+  // omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
+  // omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
   // omp45-to-51-var-error@+1 {{local variable 'a' should not be used in 
'declare target' directive}}
 #pragma omp declare target to(a) 
   return (0);
@@ -283,48 +303,48 @@ namespace {
 
 // expected-error@+1 {{'x' appears multiple times in clauses on the same 
declare target directive}}
 #pragma omp declare target (x, x) 
-// omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 // omp45-to-51-clause-error@+1 {{'x' appears multiple times in clauses on the 
same declare target directive}}
 #pragma omp declare target to(x) to(x)
 // expected-error@+1 {{'x' must not appear in both clauses 'to' and 'link'}}
 #pragma omp declare target link(x) 
 
 void bazz() {}
-// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 // host5-note@+2 3 {{marked as 'device_type(nohost)' here}}
 // omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}} 
 #pragma omp declare target to(bazz) device_type(nohost)
 void bazzz() {bazz();}
-// omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 // omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
 #pragma omp declare target to(bazzz) device_type(nohost) 
 // host5-error@+1 {{function with 'device_type(nohost)' is not available on 
host}}
 void any() {bazz();} 
 // host5-error@+1 {{function with 'device_type(nohost)' is not available on 
host}}
 void host1() {bazz();}
-// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 // dev5-note@+2 3 {{marked as 'device_type(host)' here}}
 // omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
 #pragma omp declare target to(host1) device_type(host)
 //host5-error@+1 {{function with 'device_type(nohost)' is not available on 
host}}
 void host2() {bazz();}
-// omp52-error@+2 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+1 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+2 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+1 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 #pragma omp declare target to(host2) 
 // dev5-error@+1 {{function with 'device_type(host)' is not available on 
device}}
 void device() {host1();}
-// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 // host5-note@+2 2 {{marked as 'device_type(nohost)' here}} 
 // omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
 #pragma omp declare target to(device) device_type(nohost)
 void host3() {host1();} // dev5-error {{function with 'device_type(host)' is 
not available on device}}
-// omp52-error@+2 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+1 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+2 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+1 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 #pragma omp declare target to(host3)
 
 #pragma omp declare target
@@ -343,17 +363,17 @@ void any7() {device();}
 void any8() {any2();}
 
 int MultiDevTy;
-// omp52-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+2 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+3 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+2 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 // omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
 #pragma omp declare target to(MultiDevTy) device_type(any)
-// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 // host-5-and-51-error@+2 {{'device_type(host)' does not match previously 
specified 'device_type(any)' for the same declaration}}
 // omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
 #pragma omp declare target to(MultiDevTy) device_type(host)
-// omp52-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
-// omp52-error@+3 {{expected at least one 'enter', 'link' or 'indirect' 
clause}}
+// omp52-or-later-error@+4 {{unexpected 'to' clause, use 'enter' instead}}
+// omp52-or-later-error@+3 {{expected at least one 'enter', 'link' or 
'indirect' clause}}
 // no-host5-and-51-error@+2 {{'device_type(nohost)' does not match previously 
specified 'device_type(any)' for the same declaration}}
 // omp45-error@+1 {{unexpected 'device_type' clause, only 'to' or 'link' 
clauses expected}}
 #pragma omp declare target to(MultiDevTy) device_type(nohost)
@@ -414,6 +434,8 @@ target *S1 = &S;
 // expected-warning@+1 {{expected '#pragma omp end declare target' at end of 
file to match '#pragma omp declare target'}}
 #pragma omp declare target
 #else
-// expected-warning@+1 {{expected '#pragma omp end declare target' at end of 
file to match '#pragma omp begin declare target'}}
+// omp60-warning@+3 {{expected '#pragma omp end declare target' at end of file 
to match '#pragma omp begin declare_target'}}
+// omp52-warning@+2 {{expected '#pragma omp end declare target' at end of file 
to match '#pragma omp begin declare target'}}
+// omp45-to-51-warning@+1 {{expected '#pragma omp end declare target' at end 
of file to match '#pragma omp begin declare target'}}
 #pragma omp begin declare target
 #endif

>From f55768135d31cfa062ff452d0cea17399e68d806 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <krzysztof.parzys...@amd.com>
Date: Mon, 9 Jun 2025 18:18:25 -0500
Subject: [PATCH 4/6] Fix testcase

---
 clang/test/OpenMP/declare_mapper_messages.c | 63 ++++++++++++++-------
 1 file changed, 43 insertions(+), 20 deletions(-)

diff --git a/clang/test/OpenMP/declare_mapper_messages.c 
b/clang/test/OpenMP/declare_mapper_messages.c
index 2238689227311..4631016698c7d 100644
--- a/clang/test/OpenMP/declare_mapper_messages.c
+++ b/clang/test/OpenMP/declare_mapper_messages.c
@@ -1,12 +1,12 @@
-// RUN: %clang_cc1 -verify=omp50,expected -fopenmp -fopenmp-version=50 
-ferror-limit 100 -DOMP50 %s
-// RUN: %clang_cc1 -verify=omp51,expected -fopenmp -ferror-limit 100 %s
-// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp -fopenmp-version=52 
-ferror-limit 100 -DOMP52 %s
-// RUN: %clang_cc1 -verify=expected,omp60 -fopenmp -fopenmp-version=60 
-ferror-limit 100 -DOMP60 %s
+// RUN: %clang_cc1 -verify=omp50,omp5x,expected -fopenmp -fopenmp-version=50 
-ferror-limit 100 -DOMP50 %s
+// RUN: %clang_cc1 -verify=omp51,omp5x,expected -fopenmp -ferror-limit 100 %s
+// RUN: %clang_cc1 -verify=expected,omp52,omp5x -fopenmp -fopenmp-version=52 
-ferror-limit 100 -DOMP52 %s
+// RUN: %clang_cc1 -verify=expected,omp60,omp60-maybe-simd -fopenmp 
-fopenmp-version=60 -ferror-limit 100 -DOMP60 %s
 
-// RUN: %clang_cc1 -verify=omp50,expected -fopenmp-simd -fopenmp-version=50 
-ferror-limit 100 -DOMP50 %s
-// RUN: %clang_cc1 -verify=omp51-simd,expected -fopenmp-simd -ferror-limit 100 
%s
-// RUN: %clang_cc1 -verify=expected,omp52 -fopenmp-simd -fopenmp-version=52 
-ferror-limit 100 -DOMP52 %s
-// RUN: %clang_cc1 -verify=expected,omp60-simd -fopenmp-simd 
-fopenmp-version=60 -ferror-limit 100 -DOMP60 %s
+// RUN: %clang_cc1 -verify=omp50,omp5x,expected -fopenmp-simd 
-fopenmp-version=50 -ferror-limit 100 -DOMP50 %s
+// RUN: %clang_cc1 -verify=omp51-simd,omp5x,expected -fopenmp-simd 
-ferror-limit 100 %s
+// RUN: %clang_cc1 -verify=expected,omp52,omp5x -fopenmp-simd 
-fopenmp-version=52 -ferror-limit 100 -DOMP52 %s
+// RUN: %clang_cc1 -verify=expected,omp60-simd,omp60-maybe-simd -fopenmp-simd 
-fopenmp-version=60 -ferror-limit 100 -DOMP60 %s
 
 int temp; // expected-note {{'temp' declared here}}
 
@@ -16,17 +16,38 @@ struct vec {                                                
            // expec
   double *data;
 };
 
-#pragma omp declare mapper                                              // 
expected-error {{expected '(' after 'declare mapper'}}
-#pragma omp declare mapper {                                            // 
expected-error {{expected '(' after 'declare mapper'}}
-#pragma omp declare mapper(                                             // 
expected-error {{expected a type}} expected-error {{expected declarator on 'omp 
declare mapper' directive}}
-#pragma omp declare mapper(#                                            // 
expected-error {{expected a type}} expected-error {{expected declarator on 'omp 
declare mapper' directive}}
-#pragma omp declare mapper(struct v                                     // 
expected-error {{expected declarator on 'omp declare mapper' directive}}
-#pragma omp declare mapper(struct vec                                   // 
expected-error {{expected declarator on 'omp declare mapper' directive}}
-#pragma omp declare mapper(S v                                          // 
expected-error {{unknown type name 'S'}}
-#pragma omp declare mapper(struct vec v                                 // 
expected-error {{expected ')'}} expected-note {{to match this '('}}
-#pragma omp declare mapper(aa:struct vec v)                             // 
expected-error {{expected at least one clause on '#pragma omp declare mapper' 
directive}}
-#pragma omp declare mapper(bb:struct vec v) private(v)                  // 
expected-error {{expected at least one clause on '#pragma omp declare mapper' 
directive}} // expected-error {{unexpected OpenMP clause 'private' in directive 
'#pragma omp declare mapper'}}
-#pragma omp declare mapper(cc:struct vec v) map(v) (                    // 
expected-warning {{extra tokens at the end of '#pragma omp declare mapper' are 
ignored}}
+// omp60-maybe-simd-error@+2 {{expected '(' after 'declare_mapper'}}
+// omp5x-error@+1 {{expected '(' after 'declare mapper'}}
+#pragma omp declare mapper
+// omp60-maybe-simd-error@+2 {{expected '(' after 'declare_mapper'}}
+// omp5x-error@+1 {{expected '(' after 'declare mapper'}}
+#pragma omp declare mapper {
+// expected-error@+2 {{expected a type}}
+// expected-error@+1 {{expected declarator on 'omp declare mapper' directive}}
+#pragma omp declare mapper(
+// expected-error@+2 {{expected a type}}
+// expected-error@+1 {{expected declarator on 'omp declare mapper' directive}}
+#pragma omp declare mapper(#
+// expected-error@+1 {{expected declarator on 'omp declare mapper' directive}}
+#pragma omp declare mapper(struct v
+// expected-error@+1 {{expected declarator on 'omp declare mapper' directive}}
+#pragma omp declare mapper(struct vec
+// expected-error@+1 {{unknown type name 'S'}}
+#pragma omp declare mapper(S v
+// expected-error@+2 {{expected ')'}}
+// expected-note@+1 {{to match this '('}}
+#pragma omp declare mapper(struct vec v
+// omp60-maybe-simd-error@+2 {{expected at least one clause on '#pragma omp 
declare_mapper' directive}}
+// omp5x-error@+1 {{expected at least one clause on '#pragma omp declare 
mapper' directive}}
+#pragma omp declare mapper(aa:struct vec v)
+// omp60-maybe-simd-error@+4 {{expected at least one clause on '#pragma omp 
declare_mapper' directive}}
+// omp60-maybe-simd-error@+3 {{unexpected OpenMP clause 'private' in directive 
'#pragma omp declare_mapper'}}
+// omp5x-error@+2 {{expected at least one clause on '#pragma omp declare 
mapper' directive}}
+// omp5x-error@+1 {{unexpected OpenMP clause 'private' in directive '#pragma 
omp declare mapper'}}
+#pragma omp declare mapper(bb:struct vec v) private(v)
+// omp60-maybe-simd-warning@+2 {{extra tokens at the end of '#pragma omp 
declare_mapper' are ignored}}
+// omp5x-warning@+1 {{extra tokens at the end of '#pragma omp declare mapper' 
are ignored}}
+#pragma omp declare mapper(cc:struct vec v) map(v) (
 
 #pragma omp declare mapper(++: struct vec v) map(v.len)                 // 
expected-error {{illegal OpenMP user-defined mapper identifier}}
 #pragma omp declare mapper(id1: struct vec v) map(v.len, temp)          // 
expected-error {{only variable 'v' is allowed in map clauses of this 'omp 
declare mapper' directive}}
@@ -58,7 +79,9 @@ int fun(int arg) {
 #pragma omp declare mapper(id: struct vec v) map(v.len)                 // 
expected-note {{previous definition is here}}
 #pragma omp declare mapper(id: struct vec v) map(v.len)                 // 
expected-error {{redefinition of user-defined mapper for type 'struct vec' with 
name 'id'}}
     {
-#pragma omp declare mapper(id: struct vec v) map(v.len) allocate(v)   // 
expected-error {{unexpected OpenMP clause 'allocate' in directive '#pragma omp 
declare mapper'}}
+// omp60-maybe-simd-error@+2 {{unexpected OpenMP clause 'allocate' in 
directive '#pragma omp declare_mapper'}}
+// omp5x-error@+1 {{unexpected OpenMP clause 'allocate' in directive '#pragma 
omp declare mapper'}}
+#pragma omp declare mapper(id: struct vec v) map(v.len) allocate(v)
       struct vec vv, v1;
       struct vec arr[10];
       double d;

>From 0d0d9737379dd83298327e091d1a4a1dd15589d3 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <krzysztof.parzys...@amd.com>
Date: Tue, 10 Jun 2025 07:15:38 -0500
Subject: [PATCH 5/6] Fix testcase

---
 clang/test/OpenMP/target_map_messages.cpp | 59 ++++++++++++++---------
 1 file changed, 36 insertions(+), 23 deletions(-)

diff --git a/clang/test/OpenMP/target_map_messages.cpp 
b/clang/test/OpenMP/target_map_messages.cpp
index 911031d5412a9..4a026584a47cb 100644
--- a/clang/test/OpenMP/target_map_messages.cpp
+++ b/clang/test/OpenMP/target_map_messages.cpp
@@ -1,35 +1,35 @@
 // -fopenmp, -fno-openmp-extensions
-// RUN: %clang_cc1 -verify=expected,ge50,lt51,lt60,omp,lt51-omp -fopenmp 
-fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,omp,lt51-omp -fopenmp 
-fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,omp,lt51-omp -fopenmp 
-fno-openmp-extensions -fopenmp-version=40 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,omp,lt51-omp -fopenmp 
-fno-openmp-extensions -fopenmp-version=45 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,lt51,lt60,omp,lt51-omp -fopenmp 
-fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,ge51,lt60,omp,ge51-omp -fopenmp 
-fno-openmp-extensions -fopenmp-version=51 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,ge51,ge52,lt60,omp,ge52-omp,omp52 
-fopenmp -fno-openmp-extensions -fopenmp-version=52 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,ge52,ge60,omp,ge60-omp,omp60 -fopenmp 
-fno-openmp-extensions -fopenmp-version=60 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,omp,lt51-omp -fopenmp 
-fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,ge51,lt60,omp,ge51-omp -fopenmp 
-fno-openmp-extensions -fopenmp-version=51 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 
-verify=expected,omp5x,ge50,ge51,ge52,lt60,omp,ge52-omp,omp52 -fopenmp 
-fno-openmp-extensions -fopenmp-version=52 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,ge60,omp,ge60-omp,omp60 -fopenmp 
-fno-openmp-extensions -fopenmp-version=60 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -DCCODE -verify -fopenmp -fno-openmp-extensions 
-ferror-limit 300 -x c %s -Wno-openmp -Wuninitialized -Wno-vla
 
 // -fopenmp-simd, -fno-openmp-extensions
-// RUN: %clang_cc1 -verify=expected,ge50,lt51,lt60,omp,lt51-omp -fopenmp-simd 
-fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,omp,lt51-omp 
-fopenmp-simd -fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,omp,lt51-omp -fopenmp-simd 
-fno-openmp-extensions -fopenmp-version=40 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,omp,lt51-omp -fopenmp-simd 
-fno-openmp-extensions -fopenmp-version=45 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,lt51,lt60,omp,lt51-omp -fopenmp-simd 
-fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,ge51,lt60,omp,ge51-omp -fopenmp-simd 
-fno-openmp-extensions -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized 
-Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,omp,lt51-omp 
-fopenmp-simd -fno-openmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,ge51,lt60,omp,ge51-omp 
-fopenmp-simd -fno-openmp-extensions -ferror-limit 300 %s -Wno-openmp-target 
-Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -DCCODE -verify -fopenmp-simd -fno-openmp-extensions 
-ferror-limit 300 -x c %s -Wno-openmp-mapping -Wuninitialized -Wno-vla
 
 // -fopenmp -fopenmp-extensions
-// RUN: %clang_cc1 -verify=expected,ge50,lt51,lt60,ompx,lt51-ompx -fopenmp 
-fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target 
-Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,ompx,lt51-ompx 
-fopenmp -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,ompx,lt51-ompx -fopenmp 
-fopenmp-extensions -fopenmp-version=40 -ferror-limit 300 %s -Wno-openmp-target 
-Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,ompx,lt51-ompx -fopenmp 
-fopenmp-extensions -fopenmp-version=45 -ferror-limit 300 %s -Wno-openmp-target 
-Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,lt51,lt60,ompx,lt51-ompx -fopenmp 
-fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s -Wno-openmp-target 
-Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,ge51,lt60,ompx,ge51-ompx -fopenmp 
-fopenmp-extensions -ferror-limit 300 %s -Wno-openmp-target -Wuninitialized 
-Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,ompx,lt51-ompx 
-fopenmp -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,ge51,lt60,ompx,ge51-ompx 
-fopenmp -fopenmp-extensions -ferror-limit 300 %s -Wno-openmp-target 
-Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -DCCODE -verify -fopenmp -fopenmp-extensions -ferror-limit 
300 -x c %s -Wno-openmp -Wuninitialized -Wno-vla
 
 // -fopenmp-simd -fopenmp-extensions
-// RUN: %clang_cc1 -verify=expected,ge50,lt51,lt60,ompx,lt51-ompx 
-fopenmp-simd -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,ompx,lt51-ompx 
-fopenmp-simd -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,ompx,lt51-ompx 
-fopenmp-simd -fopenmp-extensions -fopenmp-version=40 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -verify=expected,lt50,lt51,lt60,ompx,lt51-ompx 
-fopenmp-simd -fopenmp-extensions -fopenmp-version=45 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,lt51,lt60,ompx,lt51-ompx 
-fopenmp-simd -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
-// RUN: %clang_cc1 -verify=expected,ge50,ge51,lt60,ompx,ge51-ompx 
-fopenmp-simd -fopenmp-extensions -ferror-limit 300 %s -Wno-openmp-target 
-Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,lt51,lt60,ompx,lt51-ompx 
-fopenmp-simd -fopenmp-extensions -fopenmp-version=50 -ferror-limit 300 %s 
-Wno-openmp-target -Wuninitialized -Wno-vla
+// RUN: %clang_cc1 -verify=expected,omp5x,ge50,ge51,lt60,ompx,ge51-ompx 
-fopenmp-simd -fopenmp-extensions -ferror-limit 300 %s -Wno-openmp-target 
-Wuninitialized -Wno-vla
 // RUN: %clang_cc1 -DCCODE -verify -fopenmp-simd -fopenmp-extensions 
-ferror-limit 300 -x c %s -Wno-openmp-mapping -Wuninitialized -Wno-vla
 
 // Check
@@ -87,7 +87,7 @@ struct SA {
     {}
     #pragma omp target map(arg[2:2],a,d) // expected-error {{subscripted value 
is not an array or pointer}}
     {}
-    #pragma omp target map(arg,a*2) // lt50-error {{expected expression 
containing only member accesses and/or array sections based on named 
variables}} ge50-error {{expected addressable lvalue in 'map' clause}}
+    #pragma omp target map(arg,a*2) // lt50-error {{expected expression 
containing only member accesses and/or array sections based on named 
variables}} ge50-error {{expected addressable lvalue in 'map' clause}} 
ge60-error {{expected addressable lvalue in 'map' clause}}
     {}
     #pragma omp target map(arg,(c+1)[2]) // lt50-error {{expected expression 
containing only member accesses and/or array sections based on named variables}}
     {}
@@ -170,27 +170,32 @@ struct SA {
     // expected-error@+1 {{use of undeclared identifier 'present'}}
     #pragma omp target map(present)
     {}
+    // ge60-error@+4 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator', 'self}}
     // ge52-error@+3 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator'}}
     // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present'}}
     // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper'}}
     #pragma omp target map(ompx_hold, tofrom: c,f)
     {}
+    // ge60-error@+4 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator', 'self}}
     // ge52-error@+3 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator'}}
     // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present'}}
     // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper'}}
     #pragma omp target map(ompx_hold, tofrom: c[1:2],f)
     {}
+    // ge60-error@+4 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator', 'self}}
     // ge52-error@+3 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator'}}
     // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present'}}
     // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper'}}
     #pragma omp target map(ompx_hold, tofrom: c,f[1:2])
     {}
+    // ge60-error@+5 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator', 'self}}
     // ge52-error@+4 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator'}}
     // expected-error@+3 {{section length is unspecified and cannot be 
inferred because subscripted value is not an array}}
     // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present'}}
     // lt51-omp-error@+1 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper'}}
     #pragma omp target map(ompx_hold, tofrom: c[:],f)
     {}
+    // ge60-error@+5 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator', 'self}}
     // ge52-error@+4 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present', 'iterator'}}
     // expected-error@+3 {{section length is unspecified and cannot be 
inferred because subscripted value is not an array}}
     // ge51-omp-error@+2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present'}}
@@ -211,12 +216,14 @@ struct SA {
     // lt51-error@+1 2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper'}}
     #pragma omp target map(present, present, tofrom: a)
     {}
+    // ge60-error@+5 2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present', 'iterator', 'self}}
     // ge52-error@+4 2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present', 'iterator'}}
     // ompx-error@+3 {{same map type modifier has been specified more than 
once}}
     // ge51-omp-error@+2 2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present'}}
     // lt51-omp-error@+1 2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper'}}
     #pragma omp target map(ompx_hold, ompx_hold, tofrom: a)
     {}
+    // ge60-error@+10 2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present', 'iterator', 'self}}
     // ge60-error@+9 {{same map type modifier has been specified more than 
once}}
     // ge52-error@+8 2 {{incorrect map type modifier, expected one of: 
'always', 'close', 'mapper', 'present', 'iterator'}}
     // expected-error@+7 2 {{same map type modifier has been specified more 
than once}}
@@ -247,10 +254,11 @@ struct SA {
     // lt60-error@+1 {{missing map type}}
     #pragma omp target map( , f, : a)
     {}
-    #pragma omp target map(always close: a)   // lt60-error {{missing map 
type}} ge52-error{{missing ',' after map type modifier}}
+    #pragma omp target map(always close: a)   // lt60-error {{missing map 
type}} ge52-error{{missing ',' after map type modifier}} ge60-error {{missing 
',' after map type modifier}}
     {}
-    #pragma omp target map(always close bf: a)   // ge52-error 2 {{missing ',' 
after map type modifier}} expected-error {{incorrect map type, expected one of 
'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}}
+    #pragma omp target map(always close bf: a)   // ge52-error 2 {{missing ',' 
after map type modifier}} expected-error {{incorrect map type, expected one of 
'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'}} ge60-error 2 
{{missing ',' after map type modifier}}
     {}
+    // ge60-error@+5 {{missing ',' after map type modifier}}
     // ge52-error@+4 {{missing ',' after map type modifier}}
     // ge51-error@+3 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper', 'present'}}
     // lt51-error@+2 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper'}}
@@ -263,6 +271,7 @@ struct SA {
     // lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper'}}
     #pragma omp target map(tofrom from: a)
     {}
+    // ge60-error@+6 {{missing ',' after map type modifier}}
     // ge60-note@+5 {{map type 'to' is previous specified here}}
     // ge60-error@+4 {{map type is already specified}}
     // ge52-error@+3 {{missing ',' after map type modifier}}
@@ -270,7 +279,7 @@ struct SA {
     // lt51-error@+1 {{incorrect map type modifier, expected one of: 'always', 
'close', 'mapper'}}
     #pragma omp target map(to always from: a)
     {}
-    #pragma omp target map(close bf: a)   // ge52-error {{missing ',' after 
map type modifier}} expected-error {{incorrect map type, expected one of 'to', 
'from', 'tofrom', 'alloc', 'release', or 'delete'}}
+    #pragma omp target map(close bf: a)   // ge52-error {{missing ',' after 
map type modifier}} expected-error {{incorrect map type, expected one of 'to', 
'from', 'tofrom', 'alloc', 'release', or 'delete'}} ge60-error {{missing ',' 
after map type modifier}}
     {}
     #pragma omp target map(([b[I]][bf])f)  // lt50-error {{expected ',' or ']' 
in lambda capture list}} lt50-error {{expected ')'}} lt50-note {{to match this 
'('}}
     {}
@@ -476,7 +485,7 @@ void SAclient(int arg) {
   {}
 #pragma omp target map(r.S.Arr[:12])
   {}
-#pragma omp target map(r.S.foo() [:12]) // lt50-error {{expected expression 
containing only member accesses and/or array sections based on named 
variables}} ge50-error {{expected addressable lvalue in 'map' clause}}
+#pragma omp target map(r.S.foo() [:12]) // lt50-error {{expected expression 
containing only member accesses and/or array sections based on named 
variables}} ge50-error {{expected addressable lvalue in 'map' clause}} 
ge60-error {{expected addressable lvalue in 'map' clause}}
   {}
 #pragma omp target map(r.C, r.D)
   {}
@@ -673,7 +682,7 @@ T tmain(T argc) {
   foo();
 #pragma omp target map(T) // expected-error {{'T' does not refer to a value}}
   foo();
-#pragma omp target map(I) // lt50-error 2 {{expected expression containing 
only member accesses and/or array sections based on named variables}} 
ge50-error 2 {{expected addressable lvalue in 'map' clause}}
+#pragma omp target map(I) // lt50-error 2 {{expected expression containing 
only member accesses and/or array sections based on named variables}} 
ge50-error 2 {{expected addressable lvalue in 'map' clause}} ge60-error 2 
{{expected addressable lvalue in 'map' clause}}
   foo();
 #pragma omp target map(S2::S2s)
   foo();
@@ -690,7 +699,7 @@ T tmain(T argc) {
 #pragma omp target map(to, x)
   foo();
 #pragma omp target data map(to x) // expected-error {{expected ',' or ')' in 
'map' clause}}
-#pragma omp target data map(tofrom: argc > 0 ? x : y) // lt50-error 2 
{{expected expression containing only member accesses and/or array sections 
based on named variables}} ge50-error 2 {{expected addressable lvalue in 'map' 
clause}}
+#pragma omp target data map(tofrom: argc > 0 ? x : y) // lt50-error 2 
{{expected expression containing only member accesses and/or array sections 
based on named variables}} ge50-error 2 {{expected addressable lvalue in 'map' 
clause}} ge60-error 2 {{expected addressable lvalue in 'map' clause}}
 #pragma omp target data map(argc)
 #pragma omp target data map(S1) // expected-error {{'S1' does not refer to a 
value}}
 #pragma omp target data map(a, b, c, d, f) // expected-error {{incomplete type 
'S1' where a complete type is required}} warn-warning 2 {{type 'const S2' is 
not trivially copyable and not guaranteed to be mapped correctly}} warn-warning 
2 {{type 'const S3' is not trivially copyable and not guaranteed to be mapped 
correctly}}
@@ -809,7 +818,11 @@ int main(int argc, char **argv) {
   SC1 s;
   SC1 *p;
   int Arr[10];
-#pragma omp target data map // expected-error {{expected '(' after 'map'}} 
lt50-error {{expected at least one 'map' or 'use_device_ptr' clause for 
'#pragma omp target data'}} ge50-error {{expected at least one 'map', 
'use_device_ptr', or 'use_device_addr' clause for '#pragma omp target data'}}
+// expected-error@+4 {{expected '(' after 'map'}}
+// lt50-error@+3 {{expected at least one 'map' or 'use_device_ptr' clause for 
'#pragma omp target data'}}
+// omp5x-error@+2 {{expected at least one 'map', 'use_device_ptr', or 
'use_device_addr' clause for '#pragma omp target data'}}
+// ge60-error@+1 {{expected at least one 'map', 'use_device_ptr', or 
'use_device_addr' clause for '#pragma omp target_data'}}
+#pragma omp target data map
 #pragma omp target data map( // expected-error {{expected ')'}} expected-note 
{{to match this '('}} expected-error {{expected expression}}
 #pragma omp target data map() // expected-error {{expected expression}}
 #pragma omp target data map(alloc) // expected-error {{use of undeclared 
identifier 'alloc'}}
@@ -828,7 +841,7 @@ int main(int argc, char **argv) {
 #pragma omp target map(to, x)
   foo();
 #pragma omp target data map(to x) // expected-error {{expected ',' or ')' in 
'map' clause}}
-#pragma omp target data map(tofrom: argc > 0 ? argv[1] : argv[2]) // 
lt50-error {{expected expression containing only member accesses and/or array 
sections based on named variables}} ge50-error {{expected addressable lvalue in 
'map' clause}}
+#pragma omp target data map(tofrom: argc > 0 ? argv[1] : argv[2]) // 
lt50-error {{expected expression containing only member accesses and/or array 
sections based on named variables}} ge50-error {{expected addressable lvalue in 
'map' clause}} ge60-error {{expected addressable lvalue in 'map' clause}}
 #pragma omp target data map(argc)
 #pragma omp target data map(S1) // expected-error {{'S1' does not refer to a 
value}}
 #pragma omp target data map(a, b, c, d, f) // expected-error {{incomplete type 
'S1' where a complete type is required}} warn-warning {{type 'const S2' is not 
trivially copyable and not guaranteed to be mapped correctly}} warn-warning 
{{type 'const S3' is not trivially copyable and not guaranteed to be mapped 
correctly}}

>From 9099611ef0ae29e6e445275255b0e5ed3cb5e5eb Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <krzysztof.parzys...@amd.com>
Date: Tue, 10 Jun 2025 07:21:40 -0500
Subject: [PATCH 6/6] Fix testcase

---
 clang/test/OpenMP/target_data_ast_print.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/clang/test/OpenMP/target_data_ast_print.cpp 
b/clang/test/OpenMP/target_data_ast_print.cpp
index a41c7f1a0da53..3f939549dcb54 100644
--- a/clang/test/OpenMP/target_data_ast_print.cpp
+++ b/clang/test/OpenMP/target_data_ast_print.cpp
@@ -102,7 +102,7 @@ T tmain(T argc, T *argv) {
 // CHECK-NEXT: T i, j, b, c, d, e, x[20];
 // CHECK-NEXT: #pragma omp target data map(to: c){{$}}
 // CHECK-NEXT: i = argc;
-// CHECK-NEXT: #pragma omp target data map(to: c) if(target data: j > 0)
+// CHECK-NEXT: #pragma omp target data map(to: c) if(target{{[ _]}}data: j > 0)
 // CHECK-NEXT: foo();
 // CHECK-NEXT: #pragma omp target data map(to: c) if(b)
 // CHECK-NEXT: foo();
@@ -140,7 +140,7 @@ T tmain(T argc, T *argv) {
 // CHECK-NEXT: int i, j, b, c, d, e, x[20];
 // CHECK-NEXT: #pragma omp target data map(to: c)
 // CHECK-NEXT: i = argc;
-// CHECK-NEXT: #pragma omp target data map(to: c) if(target data: j > 0)
+// CHECK-NEXT: #pragma omp target data map(to: c) if(target{{[ _]}}data: j > 0)
 // CHECK-NEXT: foo();
 // CHECK-NEXT: #pragma omp target data map(to: c) if(b)
 // CHECK-NEXT: foo();
@@ -178,7 +178,7 @@ T tmain(T argc, T *argv) {
 // CHECK-NEXT: char i, j, b, c, d, e, x[20];
 // CHECK-NEXT: #pragma omp target data map(to: c)
 // CHECK-NEXT: i = argc;
-// CHECK-NEXT: #pragma omp target data map(to: c) if(target data: j > 0)
+// CHECK-NEXT: #pragma omp target data map(to: c) if(target{{[ _]}}data: j > 0)
 // CHECK-NEXT: foo();
 // CHECK-NEXT: #pragma omp target data map(to: c) if(b)
 // CHECK-NEXT: foo();
@@ -225,7 +225,7 @@ int main (int argc, char **argv) {
   a=2;
 // CHECK-NEXT: a = 2;
 #pragma omp target data map(to: c) if (target data: b)
-// CHECK: #pragma omp target data map(to: c) if(target data: b)
+// CHECK: #pragma omp target data map(to: c) if(target{{[ _]}}data: b)
   foo();
 // CHECK-NEXT: foo();
 

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

Reply via email to