diff options
| author | Alexey Bataev <a.bataev@hotmail.com> | 2018-02-16 19:16:54 +0000 |
|---|---|---|
| committer | Alexey Bataev <a.bataev@hotmail.com> | 2018-02-16 19:16:54 +0000 |
| commit | 9a75738b2b785097a018e2df54925faead6cc6d0 (patch) | |
| tree | 5d7416a1edbd4e7beb9de4575de279de5f8b2c4f | |
| parent | ba92059ca9ffce8b9eb0c496638dec62a2975ae3 (diff) | |
| download | bcm5719-llvm-9a75738b2b785097a018e2df54925faead6cc6d0.tar.gz bcm5719-llvm-9a75738b2b785097a018e2df54925faead6cc6d0.zip | |
[OPENMP] Fix PR35873: Fix data-sharing attributes for const variables.
Compiler erroneously returned wrong data-sharing attributes for the
constant variables if they have explictly specified attributes.
llvm-svn: 325373
| -rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 2 | ||||
| -rw-r--r-- | clang/test/OpenMP/parallel_for_codegen.cpp | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 7015b0119e1..a712a81ee71 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -1025,7 +1025,7 @@ DSAStackTy::DSAVarData DSAStackTy::getTopDSA(ValueDecl *D, bool FromParent) { D, [](OpenMPClauseKind C) -> bool { return C == OMPC_firstprivate; }, MatchesAlways, FromParent); if (DVarTemp.CKind == OMPC_firstprivate && DVarTemp.RefExpr) - return DVar; + return DVarTemp; DVar.CKind = OMPC_shared; return DVar; diff --git a/clang/test/OpenMP/parallel_for_codegen.cpp b/clang/test/OpenMP/parallel_for_codegen.cpp index d2f3647221c..e6199f00eab 100644 --- a/clang/test/OpenMP/parallel_for_codegen.cpp +++ b/clang/test/OpenMP/parallel_for_codegen.cpp @@ -354,9 +354,9 @@ int foo() {return 0;}; // TERM_DEBUG-LABEL: parallel_for // CLEANUP: parallel_for -void parallel_for(float *a, int n) { +void parallel_for(float *a, const int n) { float arr[n]; -#pragma omp parallel for schedule(static, 5) private(arr) +#pragma omp parallel for schedule(static, 5) private(arr) default(none) firstprivate(n) shared(a) // TERM_DEBUG-NOT: __kmpc_global_thread_num // TERM_DEBUG: call void @__kmpc_for_static_init_4u({{.+}}), !dbg [[DBG_LOC_START:![0-9]+]] // TERM_DEBUG: invoke i32 {{.*}}foo{{.*}}() @@ -370,7 +370,7 @@ void parallel_for(float *a, int n) { // CLEANUP: call void @__kmpc_for_static_init_4u({{.+}}) // CLEANUP: call void @__kmpc_for_static_fini({{.+}}) for (unsigned i = 131071; i <= 2147483647; i += 127) - a[i] += foo() + arr[i]; + a[i] += foo() + arr[i] + n; } // Check source line corresponds to "#pragma omp parallel for schedule(static, 5)" above: // TERM_DEBUG-DAG: [[DBG_LOC_START]] = !DILocation(line: [[@LINE-4]], |

