[clang] [OpenACC] Implement Default clause for Compute Constructs (PR #88135)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 10 04:57:09 PDT 2024
================
@@ -63,8 +79,43 @@ SemaOpenACC::ActOnClause(ArrayRef<const OpenACCClause *> ExistingClauses,
return nullptr;
}
- // TODO OpenACC: Switch over the clauses we implement here and 'create'
- // them.
+ switch (Clause.getClauseKind()) {
+ case OpenACCClauseKind::Default: {
+ // Restrictions only properly implemented on 'compute' constructs, and
+ // 'compute' constructs are the only construct that can do anything with
+ // this yet, so skip/treat as unimplemented in this case.
+ if (Clause.getDirectiveKind() != OpenACCDirectiveKind::Parallel &&
+ Clause.getDirectiveKind() != OpenACCDirectiveKind::Serial &&
+ Clause.getDirectiveKind() != OpenACCDirectiveKind::Kernels)
+ break;
+
+ // Don't add an invalid clause to the AST.
+ if (Clause.getDefaultClauseKind() == OpenACCDefaultClauseKind::Invalid)
+ return nullptr;
+
+ // OpenACC 3.3, Section 2.5.4:
+ // At most one 'default' clause may appear, and it must have a value of
+ // either 'none' or 'present'.
+ // Second half of the sentence is diagnosed during parsing.
+ auto Itr = llvm::find_if(ExistingClauses, [](const OpenACCClause *C) {
+ return C->getClauseKind() == OpenACCClauseKind::Default;
+ });
+
+ if (Itr != ExistingClauses.end()) {
+ SemaRef.Diag(Clause.getBeginLoc(),
+ diag::err_acc_duplicate_clause_diallowed)
----------------
Sirraide wrote:
```suggestion
diag::err_acc_duplicate_clause_disallowed)
```
https://github.com/llvm/llvm-project/pull/88135
More information about the cfe-commits
mailing list