diff options
| author | Alexey Bataev <a.bataev@hotmail.com> | 2019-06-28 14:59:25 +0000 |
|---|---|---|
| committer | Alexey Bataev <a.bataev@hotmail.com> | 2019-06-28 14:59:25 +0000 |
| commit | 405f8fc812c0067d810fa53f9dd7ba09d02f7cc5 (patch) | |
| tree | ada488e4fe9f0f6d6a9a77e5254e3ba06f36291d /clang | |
| parent | 13d9c723c89b851209c53e9509f8506559796020 (diff) | |
| download | bcm5719-llvm-405f8fc812c0067d810fa53f9dd7ba09d02f7cc5.tar.gz bcm5719-llvm-405f8fc812c0067d810fa53f9dd7ba09d02f7cc5.zip | |
[OPENMP]Fix checks for DSA in simd constructs.
The errors for incorrectly specified data-sharing attributes for simd
constructs must be emitted only for the explicitly provided clauses, not
the predetermined ones.
llvm-svn: 364647
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 4 | ||||
| -rw-r--r-- | clang/test/OpenMP/simd_loop_messages.cpp | 11 |
2 files changed, 12 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index b531d31c1ca..732b22cbf30 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -5697,12 +5697,12 @@ static bool checkOpenMPIterationSpace( ? ((NestedLoopCount == 1) ? OMPC_linear : OMPC_lastprivate) : OMPC_private; if (((isOpenMPSimdDirective(DKind) && DVar.CKind != OMPC_unknown && - DVar.CKind != PredeterminedCKind) || + DVar.CKind != PredeterminedCKind && DVar.RefExpr) || ((isOpenMPWorksharingDirective(DKind) || DKind == OMPD_taskloop || isOpenMPDistributeDirective(DKind)) && !isOpenMPSimdDirective(DKind) && DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_private && DVar.CKind != OMPC_lastprivate)) && - (DVar.CKind != OMPC_private || DVar.RefExpr != nullptr)) { + (DVar.CKind != OMPC_private || DVar.RefExpr)) { SemaRef.Diag(Init->getBeginLoc(), diag::err_omp_loop_var_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(PredeterminedCKind); diff --git a/clang/test/OpenMP/simd_loop_messages.cpp b/clang/test/OpenMP/simd_loop_messages.cpp index 80f3cb14b76..4c4ce5f98c2 100644 --- a/clang/test/OpenMP/simd_loop_messages.cpp +++ b/clang/test/OpenMP/simd_loop_messages.cpp @@ -1,5 +1,4 @@ // RUN: %clang_cc1 -fsyntax-only -fopenmp -x c++ -std=c++11 -fexceptions -fcxx-exceptions -verify %s - // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -x c++ -std=c++11 -fexceptions -fcxx-exceptions -verify %s static int sii; @@ -7,12 +6,22 @@ static int sii; #pragma omp threadprivate(sii) static int globalii; +struct S { + static int ssi; +}; + int test_iteration_spaces() { const int N = 100; float a[N], b[N], c[N]; int ii, jj, kk; float fii; double dii; +#pragma omp simd linear(S::ssi) + for (S::ssi = 0; S::ssi < 10; ++S::ssi) + ; +#pragma omp simd // no messages expected + for (S::ssi = 0; S::ssi < 10; ++S::ssi) + ; #pragma omp simd for (int i = 0; i < 10; i+=1) { c[i] = a[i] + b[i]; |

