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