[clang] 93b0229 - [OpenACC] fix 'loop' restriction of auto/seq/independent
via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 6 08:55:36 PST 2025
Author: erichkeane
Date: 2025-03-06T08:55:32-08:00
New Revision: 93b022944c04634eb30689cb72f0fe0ac2cb5f0d
URL: https://github.com/llvm/llvm-project/commit/93b022944c04634eb30689cb72f0fe0ac2cb5f0d
DIFF: https://github.com/llvm/llvm-project/commit/93b022944c04634eb30689cb72f0fe0ac2cb5f0d.diff
LOG: [OpenACC] fix 'loop' restriction of auto/seq/independent
We previously allowed duplicates of auto/seq/independent on a 'loop'
construct. This is disallowed by the restriction (which says exactly one
of...), so this patch ensures they are disallowed.
Added:
Modified:
clang/lib/Sema/SemaOpenACCClause.cpp
clang/test/SemaOpenACC/loop-construct-auto_seq_independent-clauses.c
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaOpenACCClause.cpp b/clang/lib/Sema/SemaOpenACCClause.cpp
index 0805779d74bdc..532bc3e712b3a 100644
--- a/clang/lib/Sema/SemaOpenACCClause.cpp
+++ b/clang/lib/Sema/SemaOpenACCClause.cpp
@@ -1264,7 +1264,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitAutoClause(
// Only one of the seq, independent, and auto clauses may appear.
const auto *Itr =
llvm::find_if(ExistingClauses,
- llvm::IsaPred<OpenACCIndependentClause, OpenACCSeqClause>);
+ llvm::IsaPred<OpenACCAutoClause, OpenACCIndependentClause,
+ OpenACCSeqClause>);
if (Itr != ExistingClauses.end()) {
SemaRef.Diag(Clause.getBeginLoc(), diag::err_acc_loop_spec_conflict)
<< Clause.getClauseKind() << Clause.getDirectiveKind();
@@ -1281,7 +1282,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitIndependentClause(
// OpenACC 3.3 2.9:
// Only one of the seq, independent, and auto clauses may appear.
const auto *Itr = llvm::find_if(
- ExistingClauses, llvm::IsaPred<OpenACCAutoClause, OpenACCSeqClause>);
+ ExistingClauses, llvm::IsaPred<OpenACCIndependentClause,
+ OpenACCAutoClause, OpenACCSeqClause>);
if (Itr != ExistingClauses.end()) {
SemaRef.Diag(Clause.getBeginLoc(), diag::err_acc_loop_spec_conflict)
<< Clause.getClauseKind() << Clause.getDirectiveKind();
@@ -1798,7 +1800,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitSeqClause(
// Only one of the seq, independent, and auto clauses may appear.
const auto *Itr =
llvm::find_if(ExistingClauses,
- llvm::IsaPred<OpenACCAutoClause, OpenACCIndependentClause>);
+ llvm::IsaPred<OpenACCAutoClause, OpenACCIndependentClause,
+ OpenACCSeqClause>);
if (Itr != ExistingClauses.end()) {
SemaRef.Diag(Clause.getBeginLoc(), diag::err_acc_loop_spec_conflict)
<< Clause.getClauseKind() << Clause.getDirectiveKind();
diff --git a/clang/test/SemaOpenACC/loop-construct-auto_seq_independent-clauses.c b/clang/test/SemaOpenACC/loop-construct-auto_seq_independent-clauses.c
index b4a705ba7d1c4..1c1db8c7577c3 100644
--- a/clang/test/SemaOpenACC/loop-construct-auto_seq_independent-clauses.c
+++ b/clang/test/SemaOpenACC/loop-construct-auto_seq_independent-clauses.c
@@ -33,6 +33,19 @@ void uses() {
#pragma acc loop independent seq
for(unsigned i = 0; i < 5; ++i);
+ // expected-error at +2{{OpenACC clause 'seq' on 'loop' construct conflicts with previous data dependence clause}}
+ // expected-note at +1{{previous clause is here}}
+#pragma acc loop seq seq
+ for(unsigned i = 0; i < 5; ++i);
+ // expected-error at +2{{OpenACC clause 'independent' on 'loop' construct conflicts with previous data dependence clause}}
+ // expected-note at +1{{previous clause is here}}
+#pragma acc loop independent independent
+ for(unsigned i = 0; i < 5; ++i);
+ // expected-error at +2{{OpenACC clause 'auto' on 'loop' construct conflicts with previous data dependence clause}}
+ // expected-note at +1{{previous clause is here}}
+#pragma acc loop auto auto
+ for(unsigned i = 0; i < 5; ++i);
+
int Var;
int *VarPtr;
More information about the cfe-commits
mailing list