summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Sema/SemaOpenMP.cpp10
-rw-r--r--clang/test/OpenMP/parallel_master_taskloop_loop_messages.cpp10
-rw-r--r--clang/test/OpenMP/parallel_master_taskloop_simd_loop_messages.cpp10
3 files changed, 27 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 1ff25e7eb47..d603d2139a0 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -4766,13 +4766,17 @@ StmtResult Sema::ActOnOpenMPExecutableDirective(
case OMPC_num_threads:
case OMPC_dist_schedule:
// Do not analyse if no parent teams directive.
- if (isOpenMPTeamsDirective(DSAStack->getCurrentDirective()))
+ if (isOpenMPTeamsDirective(Kind))
break;
continue;
case OMPC_if:
- if (isOpenMPTeamsDirective(DSAStack->getCurrentDirective()) &&
+ if (isOpenMPTeamsDirective(Kind) &&
cast<OMPIfClause>(C)->getNameModifier() != OMPD_target)
break;
+ if (isOpenMPParallelDirective(Kind) &&
+ isOpenMPTaskLoopDirective(Kind) &&
+ cast<OMPIfClause>(C)->getNameModifier() != OMPD_parallel)
+ break;
continue;
case OMPC_schedule:
break;
@@ -4781,7 +4785,7 @@ StmtResult Sema::ActOnOpenMPExecutableDirective(
case OMPC_final:
case OMPC_priority:
// Do not analyze if no parent parallel directive.
- if (isOpenMPParallelDirective(DSAStack->getCurrentDirective()))
+ if (isOpenMPParallelDirective(Kind))
break;
continue;
case OMPC_ordered:
diff --git a/clang/test/OpenMP/parallel_master_taskloop_loop_messages.cpp b/clang/test/OpenMP/parallel_master_taskloop_loop_messages.cpp
index a212a83ee66..76411969924 100644
--- a/clang/test/OpenMP/parallel_master_taskloop_loop_messages.cpp
+++ b/clang/test/OpenMP/parallel_master_taskloop_loop_messages.cpp
@@ -733,9 +733,19 @@ void test_loop_eh() {
void test_loop_firstprivate_lastprivate() {
S s(4);
+ int c;
#pragma omp parallel
#pragma omp parallel master taskloop lastprivate(s) firstprivate(s)
for (int i = 0; i < 16; ++i)
;
+#pragma omp parallel master taskloop if(c) default(none) // expected-error {{variable 'c' must have explicitly specified data sharing attributes}} expected-note {{explicit data sharing attribute requested here}}
+ for (int i = 0; i < 16; ++i)
+ ;
+#pragma omp parallel master taskloop if(taskloop:c) default(none) // expected-error {{variable 'c' must have explicitly specified data sharing attributes}} expected-note {{explicit data sharing attribute requested here}}
+ for (int i = 0; i < 16; ++i)
+ ;
+#pragma omp parallel master taskloop if(parallel:c) default(none)
+ for (int i = 0; i < 16; ++i)
+ ;
}
diff --git a/clang/test/OpenMP/parallel_master_taskloop_simd_loop_messages.cpp b/clang/test/OpenMP/parallel_master_taskloop_simd_loop_messages.cpp
index 71b458dc232..9f6c55e1c4c 100644
--- a/clang/test/OpenMP/parallel_master_taskloop_simd_loop_messages.cpp
+++ b/clang/test/OpenMP/parallel_master_taskloop_simd_loop_messages.cpp
@@ -728,9 +728,19 @@ void test_loop_eh() {
void test_loop_firstprivate_lastprivate() {
S s(4);
+ int c;
#pragma omp parallel
#pragma omp parallel master taskloop simd lastprivate(s) firstprivate(s)
for (int i = 0; i < 16; ++i)
;
+#pragma omp parallel master taskloop simd if(c) default(none) // expected-error {{variable 'c' must have explicitly specified data sharing attributes}} expected-note {{explicit data sharing attribute requested here}}
+ for (int i = 0; i < 16; ++i)
+ ;
+#pragma omp parallel master taskloop simd if(taskloop:c) default(none) // expected-error {{variable 'c' must have explicitly specified data sharing attributes}} expected-note {{explicit data sharing attribute requested here}}
+ for (int i = 0; i < 16; ++i)
+ ;
+#pragma omp parallel master taskloop simd if(parallel:c) default(none)
+ for (int i = 0; i < 16; ++i)
+ ;
}
OpenPOWER on IntegriCloud