forked from OSchip/llvm-project
[OpenMP] Diagnose missing cases of statements between target and teams directives
Clang fails to diagnose cases such as #pragma omp target while(0) { #pragma omp teams {} } A patch by David Sheinkman. llvm-svn: 273908
This commit is contained in:
parent
428b3e6edf
commit
3834dcebdd
|
@ -6537,6 +6537,9 @@ StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses,
|
|||
}
|
||||
assert(I != CS->body_end() && "Not found statement");
|
||||
S = *I;
|
||||
} else {
|
||||
auto *OED = dyn_cast<OMPExecutableDirective>(S);
|
||||
OMPTeamsFound = OED && isOpenMPTeamsDirective(OED->getDirectiveKind());
|
||||
}
|
||||
if (!OMPTeamsFound) {
|
||||
Diag(StartLoc, diag::err_omp_target_contains_not_only_teams);
|
||||
|
|
|
@ -2960,6 +2960,12 @@ void foo() {
|
|||
#pragma omp teams // expected-note {{nested teams construct here}}
|
||||
++a;
|
||||
}
|
||||
#pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
|
||||
{
|
||||
while (0) // expected-note {{statement outside teams construct here}}
|
||||
#pragma omp teams // expected-note {{nested teams construct here}}
|
||||
++a;
|
||||
}
|
||||
#pragma omp target
|
||||
{
|
||||
#pragma omp taskloop
|
||||
|
|
Loading…
Reference in New Issue