|
@@ -6838,13 +6838,24 @@ StmtResult Sema::ActOnOpenMPDistributeParallelForSimdDirective(
|
|
|
// The point of exit cannot be a branch out of the structured block.
|
|
|
// longjmp() and throw() must not violate the entry/exit criteria.
|
|
|
CS->getCapturedDecl()->setNothrow();
|
|
|
+ for (int ThisCaptureLevel =
|
|
|
+ getOpenMPCaptureLevels(OMPD_distribute_parallel_for_simd);
|
|
|
+ ThisCaptureLevel > 1; --ThisCaptureLevel) {
|
|
|
+ CS = cast<CapturedStmt>(CS->getCapturedStmt());
|
|
|
+ // 1.2.2 OpenMP Language Terminology
|
|
|
+ // Structured block - An executable statement with a single entry at the
|
|
|
+ // top and a single exit at the bottom.
|
|
|
+ // The point of exit cannot be a branch out of the structured block.
|
|
|
+ // longjmp() and throw() must not violate the entry/exit criteria.
|
|
|
+ CS->getCapturedDecl()->setNothrow();
|
|
|
+ }
|
|
|
|
|
|
OMPLoopDirective::HelperExprs B;
|
|
|
// In presence of clause 'collapse' with number of loops, it will
|
|
|
// define the nested loops number.
|
|
|
unsigned NestedLoopCount = CheckOpenMPLoop(
|
|
|
OMPD_distribute_parallel_for_simd, getCollapseNumberExpr(Clauses),
|
|
|
- nullptr /*ordered not a clause on distribute*/, AStmt, *this, *DSAStack,
|
|
|
+ nullptr /*ordered not a clause on distribute*/, CS, *this, *DSAStack,
|
|
|
VarsWithImplicitDSA, B);
|
|
|
if (NestedLoopCount == 0)
|
|
|
return StmtError();
|
|
@@ -7793,6 +7804,7 @@ static OpenMPDirectiveKind getOpenMPCaptureRegionForClause(
|
|
|
CaptureRegion = OMPD_teams;
|
|
|
break;
|
|
|
case OMPD_distribute_parallel_for:
|
|
|
+ case OMPD_distribute_parallel_for_simd:
|
|
|
CaptureRegion = OMPD_parallel;
|
|
|
break;
|
|
|
case OMPD_parallel_for:
|
|
@@ -7800,7 +7812,6 @@ static OpenMPDirectiveKind getOpenMPCaptureRegionForClause(
|
|
|
case OMPD_target_teams_distribute_parallel_for:
|
|
|
case OMPD_target_teams_distribute_parallel_for_simd:
|
|
|
case OMPD_teams_distribute_parallel_for_simd:
|
|
|
- case OMPD_distribute_parallel_for_simd:
|
|
|
// Do not capture schedule clause expressions.
|
|
|
break;
|
|
|
case OMPD_task:
|