[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.
diff --git a/clang/lib/Sema/SemaOpenACCClause.cpp b/clang/lib/Sema/SemaOpenACCClause.cpp
index 0805779..532bc3e 100644
--- a/clang/lib/Sema/SemaOpenACCClause.cpp
+++ b/clang/lib/Sema/SemaOpenACCClause.cpp
@@ -1264,7 +1264,8 @@
   // 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 @@
   // 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 @@
   // 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 b4a705b..1c1db8c 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 @@
 #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;