From 2875df0d56572168b478f80f59106284ef15d87d Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Tue, 7 Jul 2020 16:16:17 -0400 Subject: [PATCH] [OPENMP50]Perform data mapping analysis only for explicitly mapped data. Summary: According to OpenMP 5.0, the restrictions for mapping of overlapped data apply only for explicitly mapped data, there is no restriction for implicitly mapped data just like in OpenMP 4.5. Reviewers: jdoerfert Subscribers: yaxunl, guansong, sstefan1, cfe-commits, caomhin Tags: #clang Differential Revision: https://reviews.llvm.org/D83398 --- clang/lib/Sema/SemaOpenMP.cpp | 1 + clang/test/OpenMP/target_map_messages.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 1e7d432..3c9fdbd 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -17484,6 +17484,7 @@ static void checkMappableExpressionList( /*CurrentRegionOnly=*/true, CurComponents, CKind)) break; if (CKind == OMPC_map && + (SemaRef.getLangOpts().OpenMP <= 45 || StartLoc.isValid()) && checkMapConflicts(SemaRef, DSAS, CurDeclaration, SimpleExpr, /*CurrentRegionOnly=*/false, CurComponents, CKind)) break; diff --git a/clang/test/OpenMP/target_map_messages.cpp b/clang/test/OpenMP/target_map_messages.cpp index 833f509..df6591d 100644 --- a/clang/test/OpenMP/target_map_messages.cpp +++ b/clang/test/OpenMP/target_map_messages.cpp @@ -604,6 +604,7 @@ int main(int argc, char **argv) { const int (&l)[5] = da; SC1 s; SC1 *p; + int Arr[10]; #pragma omp target data map // expected-error {{expected '(' after 'map'}} le45-error {{expected at least one 'map' or 'use_device_ptr' clause for '#pragma omp target data'}} le50-error {{expected at least one 'map', 'use_device_ptr', or 'use_device_addr' clause for '#pragma omp target data'}} #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}} @@ -750,6 +751,12 @@ int main(int argc, char **argv) { #pragma omp target map(iarr[:2:d]) // expected-error {{expected ']'}} expected-note {{to match this '['}} {} +#pragma omp target data map(Arr[0:4]) // le45-note {{used here}} + { +#pragma omp target + Arr[0] = 2; // le45-error {{original storage of expression in data environment is shared but data environment do not fully contain mapped expression storage}} + } + return tmain(argc)+tmain(argc); // expected-note {{in instantiation of function template specialization 'tmain' requested here}} expected-note {{in instantiation of function template specialization 'tmain' requested here}} } #endif -- 2.7.4