[clang] [clang][OpenMP] 6.0: Add default clause support for 'target' directive (PR #162910)
Alexey Bataev via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 11 05:42:14 PST 2025
================
@@ -17316,45 +17316,102 @@ OMPClause *SemaOpenMP::ActOnOpenMPDefaultClause(
<< getOpenMPClauseNameForDiag(OMPC_default);
return nullptr;
}
-
- switch (M) {
- case OMP_DEFAULT_none:
- DSAStack->setDefaultDSANone(MLoc);
- break;
- case OMP_DEFAULT_shared:
- DSAStack->setDefaultDSAShared(MLoc);
- break;
- case OMP_DEFAULT_firstprivate:
- DSAStack->setDefaultDSAFirstPrivate(MLoc);
- break;
- case OMP_DEFAULT_private:
- DSAStack->setDefaultDSAPrivate(MLoc);
- break;
- default:
- llvm_unreachable("DSA unexpected in OpenMP default clause");
- }
-
- switch (VCKind) {
- case OMPC_DEFAULT_VC_aggregate:
- DSAStack->setDefaultDSAVCAggregate(VCKindLoc);
- break;
- case OMPC_DEFAULT_VC_all:
- DSAStack->setDefaultDSAVCAll(VCKindLoc);
- break;
- case OMPC_DEFAULT_VC_allocatable:
- DSAStack->setDefaultDSAVCAllocatable(VCKindLoc);
- break;
- case OMPC_DEFAULT_VC_pointer:
- DSAStack->setDefaultDSAVCPointer(VCKindLoc);
- break;
- case OMPC_DEFAULT_VC_scalar:
- DSAStack->setDefaultDSAVCScalar(VCKindLoc);
- break;
- default:
+ if (VCKind == OMPC_DEFAULT_VC_unknown) {
Diag(VCKindLoc, diag::err_omp_default_vc)
<< getOpenMPSimpleClauseTypeName(OMPC_default, unsigned(M));
+ return nullptr;
}
+ bool IsTargetDefault =
+ getLangOpts().OpenMP >= 60 &&
+ isOpenMPTargetExecutionDirective(DSAStack->getCurrentDirective());
+
+ // OpenMP 6.0, page 224, lines 3-4 default Clause, Semantics
+ // If data-sharing-attribute is shared then the clause has no effect
+ // on a target construct;
+ if (IsTargetDefault && M == OMP_DEFAULT_shared)
+ return nullptr;
+
+ auto &&SetDefaultClauseAttrs = [&](llvm::omp::DefaultKind M,
----------------
alexey-bataev wrote:
```suggestion
auto SetDefaultClauseAttrs = [&](llvm::omp::DefaultKind M,
```
https://github.com/llvm/llvm-project/pull/162910
More information about the cfe-commits
mailing list