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@+2{{OpenACC clause 'seq' on 'loop' construct conflicts with previous data dependence clause}} + // expected-note@+1{{previous clause is here}} +#pragma acc loop seq seq + for(unsigned i = 0; i < 5; ++i); + // expected-error@+2{{OpenACC clause 'independent' on 'loop' construct conflicts with previous data dependence clause}} + // expected-note@+1{{previous clause is here}} +#pragma acc loop independent independent + for(unsigned i = 0; i < 5; ++i); + // expected-error@+2{{OpenACC clause 'auto' on 'loop' construct conflicts with previous data dependence clause}} + // expected-note@+1{{previous clause is here}} +#pragma acc loop auto auto + for(unsigned i = 0; i < 5; ++i); + int Var; int *VarPtr; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits