[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