[OpenACC] Fixup previous-clause diagnostics
Brought up in a previous review as a TODO, we could be better about how we highlight what hte previous clause was, and how to show that the 'device_type' is the one being targetted. This patch rewords the diagnostics and updates a massive number of tests.
This commit is contained in:
@@ -13009,14 +13009,10 @@ def err_acc_clause_appertainment
|
||||
def err_acc_duplicate_clause_disallowed
|
||||
: Error<"OpenACC '%1' clause cannot appear more than once on a '%0' "
|
||||
"directive">;
|
||||
def note_acc_previous_clause_here : Note<"previous clause is here">;
|
||||
// TODO(OpenACC): Combine these with the one above, and decide between a
|
||||
// 'select' to split between showing the clause name, or just always printing
|
||||
// the name.
|
||||
def note_acc_previous_named_clause_here : Note<"previous '%0' clause is here">;
|
||||
def note_acc_device_type_here
|
||||
def note_acc_previous_clause_here : Note<"previous '%0' clause is here">;
|
||||
def note_acc_active_applies_clause_here
|
||||
: Note<"%enum_select<ACCDeviceTypeApp>{%Active{active}|%Applies{which "
|
||||
"applies to}}0 'device_type' clause here">;
|
||||
"applies to}}0 '%1' clause here">;
|
||||
def note_acc_previous_expr_here : Note<"previous expression is here">;
|
||||
def note_acc_previous_reference : Note<"previous reference is here">;
|
||||
def err_acc_branch_in_out_compute_construct
|
||||
@@ -13267,7 +13263,7 @@ def err_acc_duplicate_bind
|
||||
"permitted to refer to the same function">;
|
||||
def err_acc_duplicate_unnamed_bind
|
||||
: Error<"OpenACC 'bind' clause on a declaration must bind to the same name "
|
||||
"as previous bind clauses">;
|
||||
"as previous 'bind' clauses">;
|
||||
def warn_acc_confusing_routine_name
|
||||
: Warning<"OpenACC 'routine' directive with a name refers to a function "
|
||||
"with the same name as the function on the following line; this "
|
||||
|
||||
@@ -2259,7 +2259,8 @@ void SemaOpenACC::CheckRoutineDecl(SourceLocation DirLoc,
|
||||
(*cast<OpenACCBindClause>(*BindItr)) !=
|
||||
(*cast<OpenACCBindClause>(*OtherBindItr))) {
|
||||
Diag((*BindItr)->getBeginLoc(), diag::err_acc_duplicate_unnamed_bind);
|
||||
Diag((*OtherBindItr)->getEndLoc(), diag::note_acc_previous_clause_here);
|
||||
Diag((*OtherBindItr)->getEndLoc(), diag::note_acc_previous_clause_here)
|
||||
<< (*BindItr)->getClauseKind();
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2273,7 +2274,8 @@ void SemaOpenACC::CheckRoutineDecl(SourceLocation DirLoc,
|
||||
if (auto *RA = dyn_cast<OpenACCRoutineAnnotAttr>(A);
|
||||
RA && RA->getRange().getEnd().isValid()) {
|
||||
Diag((*BindItr)->getBeginLoc(), diag::err_acc_duplicate_bind);
|
||||
Diag(RA->getRange().getEnd(), diag::note_acc_previous_clause_here);
|
||||
Diag(RA->getRange().getEnd(), diag::note_acc_previous_clause_here)
|
||||
<< "bind";
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2318,7 +2320,8 @@ OpenACCRoutineDecl *SemaOpenACC::CheckRoutineDecl(
|
||||
if (OtherBindItr != RA->Clauses.end()) {
|
||||
Diag((*BindItr)->getBeginLoc(), diag::err_acc_duplicate_bind);
|
||||
Diag((*OtherBindItr)->getEndLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*BindItr)->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -2326,7 +2329,8 @@ OpenACCRoutineDecl *SemaOpenACC::CheckRoutineDecl(
|
||||
if (auto *RA = dyn_cast<OpenACCRoutineAnnotAttr>(A);
|
||||
RA && RA->getRange().getEnd().isValid()) {
|
||||
Diag((*BindItr)->getBeginLoc(), diag::err_acc_duplicate_bind);
|
||||
Diag(RA->getRange().getEnd(), diag::note_acc_previous_clause_here);
|
||||
Diag(RA->getRange().getEnd(), diag::note_acc_previous_clause_here)
|
||||
<< (*BindItr)->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,7 +127,9 @@ bool checkValidAfterDeviceType(
|
||||
S.Diag(NewClause.getBeginLoc(), diag::err_acc_clause_after_device_type)
|
||||
<< NewClause.getClauseKind() << DeviceTypeClause.getClauseKind()
|
||||
<< NewClause.getDirectiveKind();
|
||||
S.Diag(DeviceTypeClause.getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
S.Diag(DeviceTypeClause.getBeginLoc(),
|
||||
diag::note_acc_active_applies_clause_here)
|
||||
<< diag::ACCDeviceTypeApp::Active << DeviceTypeClause.getClauseKind();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -164,7 +166,8 @@ class SemaOpenACCClauseVisitor {
|
||||
SemaRef.Diag(Clause.getBeginLoc(), diag::err_acc_clause_cannot_combine)
|
||||
<< Clause.getClauseKind() << (*Itr)->getClauseKind()
|
||||
<< Clause.getDirectiveKind();
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< (*Itr)->getClauseKind();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -250,7 +253,8 @@ class SemaOpenACCClauseVisitor {
|
||||
<< (*ExistingProhibitedClause)->getClauseKind()
|
||||
<< Clause.getDirectiveKind();
|
||||
SemaRef.Diag((*ExistingProhibitedClause)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*ExistingProhibitedClause)->getClauseKind();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -268,9 +272,12 @@ class SemaOpenACCClauseVisitor {
|
||||
diag::err_acc_clause_routine_cannot_combine_before_device_type)
|
||||
<< Clause.getClauseKind() << (*BeforeDeviceType)->getClauseKind();
|
||||
SemaRef.Diag((*BeforeDeviceType)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*BeforeDeviceType)->getClauseKind();
|
||||
SemaRef.Diag((*FirstDeviceType)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_active_applies_clause_here)
|
||||
<< diag::ACCDeviceTypeApp::Active
|
||||
<< (*FirstDeviceType)->getClauseKind();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -298,9 +305,11 @@ class SemaOpenACCClauseVisitor {
|
||||
<< Clause.getClauseKind()
|
||||
<< (*ExistingProhibitedSinceLastDevice)->getClauseKind();
|
||||
SemaRef.Diag((*ExistingProhibitedSinceLastDevice)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*ExistingProhibitedSinceLastDevice)->getClauseKind();
|
||||
SemaRef.Diag((*LastDeviceType)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_active_applies_clause_here)
|
||||
<< diag::ACCDeviceTypeApp::Active << (*LastDeviceType)->getClauseKind();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -354,13 +363,17 @@ class SemaOpenACCClauseVisitor {
|
||||
diag::err_acc_clause_since_last_device_type)
|
||||
<< Clause.getClauseKind() << Clause.getDirectiveKind()
|
||||
<< (LastDeviceTypeItr != ExistingClauses.rend());
|
||||
|
||||
SemaRef.Diag((*LastSinceDevTy)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*LastSinceDevTy)->getClauseKind();
|
||||
|
||||
// Mention the last device_type as well.
|
||||
if (LastDeviceTypeItr != ExistingClauses.rend())
|
||||
SemaRef.Diag((*LastDeviceTypeItr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_active_applies_clause_here)
|
||||
<< diag::ACCDeviceTypeApp::Active
|
||||
<< (*LastDeviceTypeItr)->getClauseKind();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -417,16 +430,18 @@ class SemaOpenACCClauseVisitor {
|
||||
: "*");
|
||||
// mention the active device type.
|
||||
SemaRef.Diag(ActiveDeviceTypeClause.getBeginLoc(),
|
||||
diag::note_acc_device_type_here)
|
||||
<< diag::ACCDeviceTypeApp::Active;
|
||||
diag::note_acc_active_applies_clause_here)
|
||||
<< diag::ACCDeviceTypeApp::Active
|
||||
<< ActiveDeviceTypeClause.getClauseKind();
|
||||
// mention the previous clause.
|
||||
SemaRef.Diag((*CurClauseKindItr)->getBeginLoc(),
|
||||
diag::note_acc_previous_named_clause_here)
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*CurClauseKindItr)->getClauseKind();
|
||||
// mention the previous device type.
|
||||
SemaRef.Diag(CurDeviceTypeClause.getBeginLoc(),
|
||||
diag::note_acc_device_type_here)
|
||||
<< diag::ACCDeviceTypeApp::Applies;
|
||||
diag::note_acc_active_applies_clause_here)
|
||||
<< diag::ACCDeviceTypeApp::Applies
|
||||
<< CurDeviceTypeClause.getClauseKind();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -527,7 +542,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitIfClause(
|
||||
llvm::find_if(ExistingClauses, llvm::IsaPred<OpenACCSelfClause>);
|
||||
if (Itr != ExistingClauses.end()) {
|
||||
SemaRef.Diag(Clause.getBeginLoc(), diag::warn_acc_if_self_conflict);
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< (*Itr)->getClauseKind();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -550,7 +566,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitSelfClause(
|
||||
llvm::find_if(ExistingClauses, llvm::IsaPred<OpenACCIfClause>);
|
||||
if (Itr != ExistingClauses.end()) {
|
||||
SemaRef.Diag(Clause.getBeginLoc(), diag::warn_acc_if_self_conflict);
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< (*Itr)->getClauseKind();
|
||||
}
|
||||
return OpenACCSelfClause::Create(
|
||||
Ctx, Clause.getBeginLoc(), Clause.getLParenLoc(),
|
||||
@@ -599,9 +616,11 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitNumGangsClause(
|
||||
<< OpenACCClauseKind::Reduction << OpenACCClauseKind::Gang
|
||||
<< Clause.getDirectiveKind() << /*is on combined directive=*/1;
|
||||
SemaRef.Diag((*ReductionClauseItr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*ReductionClauseItr)->getClauseKind();
|
||||
SemaRef.Diag((*GangClauseItr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*GangClauseItr)->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -621,7 +640,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitNumGangsClause(
|
||||
<< /*>1 arg in first loc=*/1 << Clause.getClauseKind()
|
||||
<< Clause.getDirectiveKind() << OpenACCClauseKind::Reduction;
|
||||
SemaRef.Diag((*Parallel)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*Parallel)->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -639,7 +659,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitNumGangsClause(
|
||||
diag::err_acc_num_arg_conflict_reverse)
|
||||
<< OpenACCClauseKind::NumGangs << OpenACCClauseKind::Gang
|
||||
<< /*Num argument*/ 1;
|
||||
SemaRef.Diag(GC->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag(GC->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< GC->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -669,7 +690,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitNumWorkersClause(
|
||||
diag::err_acc_num_arg_conflict_reverse)
|
||||
<< OpenACCClauseKind::NumWorkers << OpenACCClauseKind::Worker
|
||||
<< /*num argument*/ 0;
|
||||
SemaRef.Diag(WC->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag(WC->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< WC->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -701,7 +723,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitVectorLengthClause(
|
||||
diag::err_acc_num_arg_conflict_reverse)
|
||||
<< OpenACCClauseKind::VectorLength << OpenACCClauseKind::Vector
|
||||
<< /*num argument*/ 0;
|
||||
SemaRef.Diag(VC->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag(VC->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< VC->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1190,7 +1213,8 @@ ExprResult CheckGangKernelsExpr(SemaOpenACC &S,
|
||||
<< HasAssocKind(DK, AssocKind) << AssocKind
|
||||
<< OpenACCClauseKind::NumGangs;
|
||||
|
||||
S.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
S.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< (*Itr)->getClauseKind();
|
||||
return ExprError();
|
||||
}
|
||||
return ExprResult{E};
|
||||
@@ -1268,7 +1292,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitVectorClause(
|
||||
<< SemaRef.getActiveComputeConstructInfo().Kind
|
||||
<< OpenACCClauseKind::VectorLength;
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*Itr)->getClauseKind();
|
||||
|
||||
IntExpr = nullptr;
|
||||
}
|
||||
@@ -1289,8 +1314,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitVectorClause(
|
||||
SemaRef.getActiveComputeConstructInfo().Kind)
|
||||
<< SemaRef.getActiveComputeConstructInfo().Kind
|
||||
<< OpenACCClauseKind::VectorLength;
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< (*Itr)->getClauseKind();
|
||||
|
||||
IntExpr = nullptr;
|
||||
}
|
||||
@@ -1319,7 +1344,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitVectorClause(
|
||||
<< OpenACCClauseKind::Vector << OpenACCClauseKind::Vector
|
||||
<< /*skip kernels construct info*/ 0;
|
||||
SemaRef.Diag(SemaRef.LoopVectorClauseLoc,
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< "vector";
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1366,7 +1392,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitWorkerClause(
|
||||
<< SemaRef.getActiveComputeConstructInfo().Kind
|
||||
<< OpenACCClauseKind::NumWorkers;
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*Itr)->getClauseKind();
|
||||
|
||||
IntExpr = nullptr;
|
||||
}
|
||||
@@ -1394,8 +1421,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitWorkerClause(
|
||||
SemaRef.getActiveComputeConstructInfo().Kind)
|
||||
<< SemaRef.getActiveComputeConstructInfo().Kind
|
||||
<< OpenACCClauseKind::NumWorkers;
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< (*Itr)->getClauseKind();
|
||||
|
||||
IntExpr = nullptr;
|
||||
}
|
||||
@@ -1414,7 +1441,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitWorkerClause(
|
||||
<< OpenACCClauseKind::Worker << OpenACCClauseKind::Worker
|
||||
<< /*skip kernels construct info*/ 0;
|
||||
SemaRef.Diag(SemaRef.LoopWorkerClauseLoc,
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< "worker";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -1428,7 +1456,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitWorkerClause(
|
||||
<< OpenACCClauseKind::Worker << OpenACCClauseKind::Vector
|
||||
<< /*skip kernels construct info*/ 0;
|
||||
SemaRef.Diag(SemaRef.LoopVectorClauseLoc,
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< "vector";
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1472,9 +1501,11 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitGangClause(
|
||||
<< Clause.getDirectiveKind()
|
||||
<< isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind());
|
||||
SemaRef.Diag((*ReductionClauseItr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*ReductionClauseItr)->getClauseKind();
|
||||
SemaRef.Diag((*NumGangsClauseItr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*NumGangsClauseItr)->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1524,7 +1555,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitGangClause(
|
||||
<< /*kernels construct info*/ 1
|
||||
<< SemaRef.LoopGangClauseOnKernel.DirKind;
|
||||
SemaRef.Diag(SemaRef.LoopGangClauseOnKernel.Loc,
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< "gang";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -1538,7 +1570,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitGangClause(
|
||||
<< OpenACCClauseKind::Gang << OpenACCClauseKind::Worker
|
||||
<< /*!kernels construct info*/ 0;
|
||||
SemaRef.Diag(SemaRef.LoopWorkerClauseLoc,
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< "worker";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -1552,7 +1585,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitGangClause(
|
||||
<< OpenACCClauseKind::Gang << OpenACCClauseKind::Vector
|
||||
<< /*!kernels construct info*/ 0;
|
||||
SemaRef.Diag(SemaRef.LoopVectorClauseLoc,
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< "vector";
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1592,7 +1626,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitSeqClause(
|
||||
SemaRef.Diag(Clause.getBeginLoc(), diag::err_acc_clause_cannot_combine)
|
||||
<< Clause.getClauseKind() << (*Itr)->getClauseKind()
|
||||
<< Clause.getDirectiveKind();
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag((*Itr)->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< (*Itr)->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1631,9 +1666,11 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitReductionClause(
|
||||
<< Clause.getDirectiveKind()
|
||||
<< isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind());
|
||||
SemaRef.Diag((*GangClauseItr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*GangClauseItr)->getClauseKind();
|
||||
SemaRef.Diag((*NumGangsClauseItr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*NumGangsClauseItr)->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1673,7 +1710,8 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitReductionClause(
|
||||
diag::err_acc_reduction_num_gangs_conflict)
|
||||
<< /*>1 arg in first loc=*/0 << Clause.getClauseKind()
|
||||
<< Clause.getDirectiveKind() << OpenACCClauseKind::NumGangs;
|
||||
SemaRef.Diag(NGC->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
SemaRef.Diag(NGC->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< NGC->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1891,7 +1929,8 @@ ExprResult SemaOpenACC::CheckReductionVar(OpenACCDirectiveKind DirectiveKind,
|
||||
if (areVarsEqual(VarExpr, OldVarExpr)) {
|
||||
Diag(VarExpr->getExprLoc(), diag::err_reduction_op_mismatch)
|
||||
<< ReductionOp << RClause->getReductionOp();
|
||||
Diag(OldVarExpr->getExprLoc(), diag::note_acc_previous_clause_here);
|
||||
Diag(OldVarExpr->getExprLoc(), diag::note_acc_previous_clause_here)
|
||||
<< RClause->getClauseKind();
|
||||
return ExprError();
|
||||
}
|
||||
}
|
||||
@@ -2033,7 +2072,8 @@ SemaOpenACC::CheckGangClause(OpenACCDirectiveKind DirKind,
|
||||
Diag(DimVal->getBeginLoc(), diag::err_acc_gang_reduction_conflict)
|
||||
<< /*gang/reduction=*/0 << DirKind;
|
||||
Diag((*ReductionItr)->getBeginLoc(),
|
||||
diag::note_acc_previous_clause_here);
|
||||
diag::note_acc_previous_clause_here)
|
||||
<< (*ReductionItr)->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -2068,7 +2108,8 @@ OpenACCClause *SemaOpenACC::CheckReductionClause(
|
||||
DimVal && DimVal->getResultAsAPSInt() > 1) {
|
||||
Diag(BeginLoc, diag::err_acc_gang_reduction_conflict)
|
||||
<< /*reduction/gang=*/1 << DirectiveKind;
|
||||
Diag(GangClause->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
Diag(GangClause->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< GangClause->getClauseKind();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ bool SemaOpenACC::DiagnoseAllowedOnceClauses(
|
||||
return false;
|
||||
|
||||
Diag(ClauseLoc, diag::err_acc_duplicate_clause_disallowed) << DK << CK;
|
||||
Diag((*Res)->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
Diag((*Res)->getBeginLoc(), diag::note_acc_previous_clause_here) << CK;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -202,7 +202,8 @@ bool SemaOpenACC::DiagnoseExclusiveClauses(
|
||||
if (Lists.AllowedExclusive.isSet(dealiasClauseKind(C->getClauseKind()))) {
|
||||
Diag(ClauseLoc, diag::err_acc_clause_cannot_combine)
|
||||
<< CK << C->getClauseKind() << DK;
|
||||
Diag(C->getBeginLoc(), diag::note_acc_previous_clause_here);
|
||||
Diag(C->getBeginLoc(), diag::note_acc_previous_clause_here)
|
||||
<< C->getClauseKind();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -28,41 +28,41 @@ void func() {
|
||||
#pragma acc host_data if_present, if_present
|
||||
|
||||
// expected-error@+4{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+3{{previous clause is here}}
|
||||
// expected-note@+3{{previous 'seq' clause is here}}
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc loop seq independent auto
|
||||
for(int i = 0; i < 5;++i) {}
|
||||
|
||||
// expected-error@+4{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+3{{previous clause is here}}
|
||||
// expected-note@+3{{previous 'seq' clause is here}}
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc loop seq, independent auto
|
||||
for(int i = 0; i < 5;++i) {}
|
||||
|
||||
// expected-error@+4{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+3{{previous clause is here}}
|
||||
// expected-note@+3{{previous 'seq' clause is here}}
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc loop seq independent, auto
|
||||
for(int i = 0; i < 5;++i) {}
|
||||
|
||||
// expected-error@+3{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'kernels loop' construct}}
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'kernels loop' construct}}
|
||||
// expected-note@+1 2{{previous clause is here}}
|
||||
// expected-note@+1 2{{previous 'seq' clause is here}}
|
||||
#pragma acc kernels loop seq independent auto
|
||||
for(int i = 0; i < 5;++i) {}
|
||||
|
||||
// expected-error@+3{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'serial loop' construct}}
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'serial loop' construct}}
|
||||
// expected-note@+1 2{{previous clause is here}}
|
||||
// expected-note@+1 2{{previous 'seq' clause is here}}
|
||||
#pragma acc serial loop seq, independent auto
|
||||
for(int i = 0; i < 5;++i) {}
|
||||
|
||||
// expected-error@+3{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'parallel loop' construct}}
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1 2{{previous clause is here}}
|
||||
// expected-note@+1 2{{previous 'seq' clause is here}}
|
||||
#pragma acc parallel loop seq independent, auto
|
||||
for(int i = 0; i < 5;++i) {}
|
||||
|
||||
@@ -1326,16 +1326,16 @@ void Gang() {
|
||||
}
|
||||
|
||||
// expected-error@+4{{OpenACC clause 'seq' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+3{{previous clause is here}}
|
||||
// expected-note@+3{{previous 'worker' clause is here}}
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine worker, vector, seq, nohost
|
||||
void bar();
|
||||
|
||||
// expected-error@+4{{OpenACC clause 'seq' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+3{{previous clause is here}}
|
||||
// expected-note@+3{{previous 'worker' clause is here}}
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine(bar) worker, vector, seq, nohost
|
||||
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ void IfClause(int x, int v) {
|
||||
x = v;
|
||||
|
||||
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'atomic' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc atomic read if(x) if (v)
|
||||
x = v;
|
||||
}
|
||||
|
||||
@@ -9,27 +9,27 @@ void uses() {
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'auto' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'auto' clause is here}}
|
||||
#pragma acc parallel loop auto seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'independent' may not appear on the same construct as a 'auto' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'auto' clause is here}}
|
||||
#pragma acc parallel loop auto independent
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc parallel loop seq auto
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc parallel loop seq independent
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'independent' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'independent' clause is here}}
|
||||
#pragma acc parallel loop independent auto
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'independent' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'independent' clause is here}}
|
||||
#pragma acc parallel loop independent seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
|
||||
@@ -508,15 +508,15 @@ void uses() {
|
||||
|
||||
// 'seq' cannot be combined with 'gang', 'worker' or 'vector'
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'seq' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc parallel loop seq gang
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'seq' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc parallel loop seq worker
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'seq' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc parallel loop seq vector
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+1{{OpenACC 'finalize' clause is not valid on 'parallel loop' directive}}
|
||||
@@ -631,15 +631,15 @@ void uses() {
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'gang' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc parallel loop gang seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'worker' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc parallel loop worker seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'vector' clause on a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc parallel loop vector seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+1{{OpenACC 'finalize' clause is not valid on 'parallel loop' directive}}
|
||||
|
||||
@@ -5,19 +5,19 @@ void SingleOnly() {
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'serial loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc serial loop default(present) self default(none)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
int i;
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'kernels loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc kernels loop self default(present) present(i) default(none) copy(i)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'parallel loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc parallel loop self default(present) private(i) default(none) copy(i)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
|
||||
@@ -8,17 +8,17 @@ void SingleOnly() {
|
||||
int i;
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'parallel loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc parallel loop default(present) async default(none)
|
||||
for (unsigned I = 0; I < 5; ++I);
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'serial loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc serial loop async default(present) copy(i) default(none) self
|
||||
for (unsigned I = 0; I < 5; ++I);
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'kernels loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc kernels loop async default(present) copy(i) default(none) self
|
||||
for (unsigned I = 0; I < 5; ++I);
|
||||
|
||||
|
||||
@@ -60,37 +60,37 @@ void uses() {
|
||||
#pragma acc serial loop device_type(*) nohost
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'default' may not follow a 'device_type' clause in a 'kernels loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels loop device_type(*) default(none)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) if(1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'self' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) self
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
int Var;
|
||||
int *VarPtr;
|
||||
// expected-error@+2{{OpenACC clause 'copy' may not follow a 'device_type' clause in a 'kernels loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels loop device_type(*) copy(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'pcopy' may not follow a 'device_type' clause in a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) pcopy(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'present_or_copy' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) present_or_copy(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+1{{OpenACC 'use_device' clause is not valid on 'kernels loop' directive}}
|
||||
#pragma acc kernels loop device_type(*) use_device(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'attach' may not follow a 'device_type' clause in a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) attach(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+1{{OpenACC 'delete' clause is not valid on 'serial loop' directive}}
|
||||
@@ -103,14 +103,14 @@ void uses() {
|
||||
#pragma acc parallel loop device_type(*) device(VarPtr)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'deviceptr' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) deviceptr(VarPtr)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+1{{OpenACC 'device_resident' clause is not valid on 'kernels loop' directive}}
|
||||
#pragma acc kernels loop device_type(*) device_resident(VarPtr)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'firstprivate' may not follow a 'device_type' clause in a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) firstprivate(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+1{{OpenACC 'host' clause is not valid on 'serial loop' directive}}
|
||||
@@ -120,55 +120,55 @@ void uses() {
|
||||
#pragma acc parallel loop device_type(*) link(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'no_create' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) no_create(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'present' may not follow a 'device_type' clause in a 'kernels loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels loop device_type(*) present(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'private' may not follow a 'device_type' clause in a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) private(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'copyout' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) copyout(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'pcopyout' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) pcopyout(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'present_or_copyout' may not follow a 'device_type' clause in a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) present_or_copyout(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'copyin' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) copyin(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'pcopyin' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) pcopyin(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'present_or_copyin' may not follow a 'device_type' clause in a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) present_or_copyin(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'create' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) create(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'pcreate' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) pcreate(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'present_or_create' may not follow a 'device_type' clause in a 'parallel loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) present_or_create(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'reduction' may not follow a 'device_type' clause in a 'serial loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial loop device_type(*) reduction(+:Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
#pragma acc serial loop device_type(*) collapse(1)
|
||||
|
||||
@@ -182,7 +182,7 @@ void KernelsTempl() {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num_gangs' clause not allowed on a 'kernels loop' construct that has a 'gang' clause with a 'num' argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc kernels loop gang(t) num_gangs(t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
@@ -192,17 +192,17 @@ void KernelsTempl() {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num' argument to 'gang' clause not allowed on a 'kernels loop' construct that has a 'num_gangs' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels loop num_gangs(t) gang(t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num_gangs' clause not allowed on a 'kernels loop' construct that has a 'gang' clause with a 'num' argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc kernels loop gang(num:t) num_gangs(t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num' argument to 'gang' clause not allowed on a 'kernels loop' construct that has a 'num_gangs' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels loop num_gangs(t) gang(num:t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
@@ -219,22 +219,22 @@ void Kernels() {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num_gangs' clause not allowed on a 'kernels loop' construct that has a 'gang' clause with a 'num' argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc kernels loop gang(t) num_gangs(t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num' argument to 'gang' clause not allowed on a 'kernels loop' construct that has a 'num_gangs' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels loop num_gangs(t) gang(t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num_gangs' clause not allowed on a 'kernels loop' construct that has a 'gang' clause with a 'num' argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc kernels loop gang(num:t) num_gangs(t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num' argument to 'gang' clause not allowed on a 'kernels loop' construct that has a 'num_gangs' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels loop num_gangs(t) gang(num:t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
@@ -260,7 +260,7 @@ void Kernels() {
|
||||
#pragma acc kernels loop gang(num:1)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'gang' clause on a 'kernels loop' construct}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'gang' clause is here}}
|
||||
#pragma acc loop gang(static:1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
|
||||
@@ -14,24 +14,24 @@ void Test() {
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_gangs' clause cannot appear more than once on a 'kernels loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels loop num_gangs(1) num_gangs(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_gangs' clause cannot appear more than once on a 'parallel loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc parallel loop num_gangs(1) num_gangs(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+3{{OpenACC 'num_gangs' clause cannot appear more than once in a 'device_type' region on a 'kernels loop' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'num_gangs' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels loop num_gangs(1) device_type(*) num_gangs(1) num_gangs(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+3{{OpenACC 'num_gangs' clause cannot appear more than once in a 'device_type' region on a 'parallel loop' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'num_gangs' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) num_gangs(1) num_gangs(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
|
||||
@@ -14,24 +14,24 @@ void Test() {
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_workers' clause cannot appear more than once on a 'kernels loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_workers' clause is here}}
|
||||
#pragma acc kernels loop num_workers(1) num_workers(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_workers' clause cannot appear more than once on a 'parallel loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_workers' clause is here}}
|
||||
#pragma acc parallel loop num_workers(1) num_workers(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+3{{OpenACC 'num_workers' clause cannot appear more than once in a 'device_type' region on a 'kernels loop' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'num_workers' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels loop num_workers(1) device_type(*) num_workers(1) num_workers(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+3{{OpenACC 'num_workers' clause cannot appear more than once in a 'device_type' region on a 'parallel loop' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'num_workers' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) num_workers(1) num_workers(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
|
||||
@@ -47,14 +47,14 @@ void uses(unsigned Parm) {
|
||||
#pragma acc kernels loop reduction(+:Parm) num_gangs(I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC 'num_gangs' clause with more than 1 argument may not appear on a 'parallel loop' construct with a 'reduction' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel loop reduction(+:Parm) num_gangs(I, I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
#pragma acc kernels loop num_gangs(I) reduction(+:Parm)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC 'reduction' clause may not appear on a 'parallel loop' construct with a 'num_gangs' clause with more than 1 argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc parallel loop num_gangs(I, I) reduction(+:Parm)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
@@ -62,13 +62,13 @@ void uses(unsigned Parm) {
|
||||
#pragma acc parallel loop gang(dim:1) reduction(+:Parm)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC 'reduction' clause cannot appear on the same 'parallel loop' construct as a 'gang' clause with a 'dim' value greater than 1}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc parallel loop gang(dim:2) reduction(+:Parm)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
#pragma acc parallel loop reduction(+:Parm) gang(dim:1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC 'gang' clause with a 'dim' value greater than 1 cannot appear on the same 'parallel loop' construct as a 'reduction' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel loop reduction(+:Parm) gang(dim:2)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
@@ -88,31 +88,31 @@ void uses(unsigned Parm) {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{OpenACC 'reduction' clause may not appear on a 'parallel loop' construct with a 'num_gangs' clause with more than 1 argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc parallel loop num_gangs(I, I) reduction(+:Parm) gang
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+3{{OpenACC 'reduction' clause cannot appear on the same 'parallel loop' construct as a 'gang' clause and a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'num_gangs' clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc parallel loop num_gangs(I, I) gang reduction(+:Parm)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC 'num_gangs' clause with more than 1 argument may not appear on a 'parallel loop' construct with a 'reduction' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel loop reduction(+:Parm) num_gangs(I, I) gang
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+3{{OpenACC 'reduction' clause cannot appear on the same 'parallel loop' construct as a 'gang' clause and a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'reduction' clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc parallel loop reduction(+:Parm) gang num_gangs(I, I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+3{{OpenACC 'reduction' clause cannot appear on the same 'parallel loop' construct as a 'gang' clause and a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc parallel loop gang num_gangs(I, I) reduction(+:Parm)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+3{{OpenACC 'reduction' clause cannot appear on the same 'parallel loop' construct as a 'gang' clause and a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'reduction' clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc parallel loop gang reduction(+:Parm) num_gangs(I, I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
@@ -132,14 +132,14 @@ void uses(unsigned Parm) {
|
||||
#pragma acc parallel loop reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
#pragma acc parallel loop reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
@@ -147,14 +147,14 @@ void uses(unsigned Parm) {
|
||||
#pragma acc parallel loop reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
#pragma acc loop reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
@@ -162,7 +162,7 @@ void uses(unsigned Parm) {
|
||||
#pragma acc parallel reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
|
||||
@@ -33,22 +33,22 @@ void BoolExpr(int *I, float *F) {
|
||||
void WarnMaybeNotUsed(int val1, int val2) {
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel loop self if(val1)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc serial loop self(val1) if(val1)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc kernels loop if(val1) self
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel loop if(val1) self(val2)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
|
||||
@@ -33,22 +33,22 @@ struct HasBool {
|
||||
template<typename T>
|
||||
void WarnMaybeNotUsed() {
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel loop self if(T::B)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc kernels loop self(T::B) if(T::B)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc serial loop if(T::B) self
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel loop if(T::B) self(T::B)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
@@ -58,37 +58,37 @@ void WarnMaybeNotUsed() {
|
||||
// expected-error@+4{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-note@#NOT_USED_INST{{in instantiation of function template specialization 'WarnMaybeNotUsed<HasBool>' requested here}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel loop self if(T::Invalid)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc serial loop self(T::Invalid) if(T::B)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc kernels loop self(T::B) if(T::Invalid)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel loop if(T::Invalid) self
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel loop if(T::Invalid) self(T::B)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel loop if(T::B) self(T::Invalid)
|
||||
for (unsigned i = 0; i < 5; ++i);
|
||||
}
|
||||
|
||||
@@ -39,12 +39,12 @@ void TemplUses(T t) {
|
||||
for(int j = 0; j < 5; ++j);
|
||||
|
||||
// expected-error@+2{{'vector_length' clause not allowed on a 'kernels loop' construct that has a 'vector' clause with an argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc kernels loop vector(I) vector_length(t)
|
||||
for(int j = 0; j < 5; ++j);
|
||||
|
||||
// expected-error@+2{{'length' argument to 'vector' clause not allowed on a 'kernels loop' construct that has a 'vector_length' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector_length' clause is here}}
|
||||
#pragma acc kernels loop vector_length(t) vector(I)
|
||||
for(int j = 0; j < 5; ++j);
|
||||
|
||||
@@ -53,7 +53,7 @@ void TemplUses(T t) {
|
||||
// expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-note@-5 3{{previous clause is here}}
|
||||
// expected-note@-5 3{{previous 'vector' clause is here}}
|
||||
#pragma acc loop vector worker, gang
|
||||
for(int j = 0; j < 5; ++j);
|
||||
}
|
||||
@@ -125,12 +125,12 @@ void uses() {
|
||||
for(int j = 0; j < 5; ++j);
|
||||
|
||||
// expected-error@+2{{'vector_length' clause not allowed on a 'kernels loop' construct that has a 'vector' clause with an argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc kernels loop vector(I) vector_length(t)
|
||||
for(int j = 0; j < 5; ++j);
|
||||
|
||||
// expected-error@+2{{'length' argument to 'vector' clause not allowed on a 'kernels loop' construct that has a 'vector_length' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector_length' clause is here}}
|
||||
#pragma acc kernels loop vector_length(t) vector(I)
|
||||
for(int j = 0; j < 5; ++j);
|
||||
|
||||
@@ -139,7 +139,7 @@ void uses() {
|
||||
// expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-note@-5 3{{previous clause is here}}
|
||||
// expected-note@-5 3{{previous 'vector' clause is here}}
|
||||
#pragma acc loop vector worker, gang
|
||||
for(int j = 0; j < 5; ++j);
|
||||
}
|
||||
|
||||
@@ -14,24 +14,24 @@ void Test() {
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+2{{OpenACC 'vector_length' clause cannot appear more than once on a 'kernels loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector_length' clause is here}}
|
||||
#pragma acc kernels loop vector_length(1) vector_length(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+2{{OpenACC 'vector_length' clause cannot appear more than once on a 'parallel loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector_length' clause is here}}
|
||||
#pragma acc parallel loop vector_length(1) vector_length(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+3{{OpenACC 'vector_length' clause cannot appear more than once in a 'device_type' region on a 'kernels loop' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector_length' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels loop vector_length(1) device_type(*) vector_length(1) vector_length(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
// expected-error@+3{{OpenACC 'vector_length' clause cannot appear more than once in a 'device_type' region on a 'parallel loop' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector_length' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel loop device_type(*) vector_length(1) vector_length(2)
|
||||
for(int i = 5; i < 10;++i);
|
||||
|
||||
|
||||
@@ -40,12 +40,12 @@ void TemplUses() {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num' argument to 'worker' clause not allowed on a 'kernels loop' construct that has a 'num_workers' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_workers' clause is here}}
|
||||
#pragma acc kernels loop num_workers(1) worker(num:I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num_workers' clause not allowed on a 'kernels loop' construct that has a 'worker' clause with an argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc kernels loop worker(num:I) num_workers(1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
@@ -91,12 +91,12 @@ void NormalUses() {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num' argument to 'worker' clause not allowed on a 'kernels loop' construct that has a 'num_workers' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_workers' clause is here}}
|
||||
#pragma acc kernels loop num_workers(1) worker(num:I)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{'num_workers' clause not allowed on a 'kernels loop' construct that has a 'worker' clause with an argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc kernels loop worker(num:I) num_workers(1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
@@ -115,7 +115,7 @@ void NormalUses() {
|
||||
#pragma acc kernels loop num_workers(1)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{'num' argument to 'worker' clause not allowed on a 'loop' construct associated with a 'kernels loop' construct that has a 'num_workers' clause}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'num_workers' clause is here}}
|
||||
#pragma acc loop worker(num:1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
@@ -123,27 +123,27 @@ void NormalUses() {
|
||||
#pragma acc parallel loop worker
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+4{{loop with a 'gang' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'worker' clause is here}}
|
||||
// expected-error@+2{{loop with a 'worker' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-5{{previous clause is here}}
|
||||
// expected-note@-5{{previous 'worker' clause is here}}
|
||||
#pragma acc loop gang, worker, vector
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
#pragma acc kernels loop worker
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+4{{loop with a 'gang' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'worker' clause is here}}
|
||||
// expected-error@+2{{loop with a 'worker' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-5{{previous clause is here}}
|
||||
// expected-note@-5{{previous 'worker' clause is here}}
|
||||
#pragma acc loop gang, worker, vector
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
#pragma acc serial loop worker
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+4{{loop with a 'gang' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'worker' clause is here}}
|
||||
// expected-error@+2{{loop with a 'worker' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-5{{previous clause is here}}
|
||||
// expected-note@-5{{previous 'worker' clause is here}}
|
||||
#pragma acc loop gang, worker, vector
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
|
||||
@@ -21,44 +21,44 @@ void Test() {
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'kernels' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'async' clause is here}}
|
||||
#pragma acc kernels async async
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'kernels' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'async' clause is here}}
|
||||
#pragma acc kernels async(1) async(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'parallel' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'async' clause is here}}
|
||||
#pragma acc parallel async(1) async(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'serial' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'async' clause is here}}
|
||||
#pragma acc serial async(1) async(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'async' clause cannot appear more than once in a 'device_type' region on a 'kernels' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'async' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels async(1) device_type(*) async(1) async(2)
|
||||
while(1);
|
||||
// expected-error@+3{{OpenACC 'async' clause cannot appear more than once in a 'device_type' region on a 'parallel' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'async' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel async device_type(*) async async
|
||||
while(1);
|
||||
// expected-error@+3{{OpenACC 'async' clause cannot appear more than once in a 'device_type' region on a 'serial' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'async' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial async(1) device_type(*) async async(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'async' clause cannot appear more than once in a 'device_type' region on a 'parallel' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'async' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel device_type(*) async async
|
||||
while(1);
|
||||
|
||||
|
||||
@@ -5,19 +5,19 @@ void SingleOnly() {
|
||||
while(0);
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'serial' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc serial default(present) self default(none)
|
||||
while(0);
|
||||
|
||||
int i;
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'kernels' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc kernels self default(present) present(i) default(none) copy(i)
|
||||
while(0);
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'parallel' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc parallel self default(present) private(i) default(none) copy(i)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
|
||||
@@ -8,17 +8,17 @@ void SingleOnly() {
|
||||
int i;
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'parallel' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc parallel default(present) async default(none)
|
||||
while(false);
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'serial' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc serial async default(present) copy(i) default(none) self
|
||||
while(false);
|
||||
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'kernels' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc kernels async default(present) copy(i) default(none) self
|
||||
while(false);
|
||||
|
||||
|
||||
@@ -66,37 +66,37 @@ void uses() {
|
||||
#pragma acc kernels device_type(*) nohost
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'default' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) default(none)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) if(1)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'self' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) self
|
||||
while(1);
|
||||
|
||||
int Var;
|
||||
int *VarPtr;
|
||||
// expected-error@+2{{OpenACC clause 'copy' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) copy(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'pcopy' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) pcopy(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'present_or_copy' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) present_or_copy(Var)
|
||||
while(1);
|
||||
// expected-error@+1{{OpenACC 'use_device' clause is not valid on 'kernels' directive}}
|
||||
#pragma acc kernels device_type(*) use_device(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'attach' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) attach(Var)
|
||||
while(1);
|
||||
// expected-error@+1{{OpenACC 'delete' clause is not valid on 'kernels' directive}}
|
||||
@@ -109,14 +109,14 @@ void uses() {
|
||||
#pragma acc kernels device_type(*) device(VarPtr)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'deviceptr' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) deviceptr(VarPtr)
|
||||
while(1);
|
||||
// expected-error@+1{{OpenACC 'device_resident' clause is not valid on 'kernels' directive}}
|
||||
#pragma acc kernels device_type(*) device_resident(VarPtr)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'firstprivate' may not follow a 'device_type' clause in a 'parallel' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel device_type(*) firstprivate(Var)
|
||||
while(1);
|
||||
// expected-error@+1{{OpenACC 'host' clause is not valid on 'kernels' directive}}
|
||||
@@ -126,55 +126,55 @@ void uses() {
|
||||
#pragma acc kernels device_type(*) link(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'no_create' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) no_create(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'present' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) present(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'private' may not follow a 'device_type' clause in a 'parallel' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel device_type(*) private(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'copyout' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) copyout(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'pcopyout' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) pcopyout(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'present_or_copyout' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) present_or_copyout(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'copyin' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) copyin(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'pcopyin' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) pcopyin(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'present_or_copyin' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) present_or_copyin(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'create' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) create(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'pcreate' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) pcreate(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'present_or_create' may not follow a 'device_type' clause in a 'kernels' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels device_type(*) present_or_create(Var)
|
||||
while(1);
|
||||
// expected-error@+2{{OpenACC clause 'reduction' may not follow a 'device_type' clause in a 'serial' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc serial device_type(*) reduction(+:Var)
|
||||
while(1);
|
||||
// expected-error@+1{{OpenACC 'collapse' clause is not valid on 'kernels' directive}}
|
||||
|
||||
@@ -13,24 +13,24 @@ void Test() {
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_gangs' clause cannot appear more than once on a 'kernels' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels num_gangs(1) num_gangs(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_gangs' clause cannot appear more than once on a 'parallel' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc parallel num_gangs(1) num_gangs(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'num_gangs' clause cannot appear more than once in a 'device_type' region on a 'kernels' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'num_gangs' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels num_gangs(1) device_type(*) num_gangs(1) num_gangs(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'num_gangs' clause cannot appear more than once in a 'device_type' region on a 'parallel' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'num_gangs' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel device_type(*) num_gangs(1) num_gangs(2)
|
||||
while(1);
|
||||
|
||||
|
||||
@@ -9,24 +9,24 @@ void Test() {
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_workers' clause cannot appear more than once on a 'kernels' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_workers' clause is here}}
|
||||
#pragma acc kernels num_workers(1) num_workers(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_workers' clause cannot appear more than once on a 'parallel' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_workers' clause is here}}
|
||||
#pragma acc parallel num_workers(1) num_workers(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'num_workers' clause cannot appear more than once in a 'device_type' region on a 'kernels' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'num_workers' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels num_workers(1) device_type(*) num_workers(1) num_workers(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'num_workers' clause cannot appear more than once in a 'device_type' region on a 'parallel' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'num_workers' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel device_type(*) num_workers(1) num_workers(2)
|
||||
while(1);
|
||||
|
||||
|
||||
@@ -42,12 +42,12 @@ void uses(unsigned Parm) {
|
||||
while (1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_gangs' clause with more than 1 argument may not appear on a 'parallel' construct with a 'reduction' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel reduction(+:Parm) num_gangs(Parm, IVar)
|
||||
while (1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'reduction' clause may not appear on a 'parallel' construct with a 'num_gangs' clause with more than 1 argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc parallel num_gangs(Parm, IVar) reduction(+:Var)
|
||||
while (1);
|
||||
|
||||
|
||||
@@ -42,12 +42,12 @@ void uses(unsigned Parm) {
|
||||
while (1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_gangs' clause with more than 1 argument may not appear on a 'parallel' construct with a 'reduction' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel reduction(+:Parm) num_gangs(Parm, IVar)
|
||||
while (1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'reduction' clause may not appear on a 'parallel' construct with a 'num_gangs' clause with more than 1 argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc parallel num_gangs(Parm, IVar) reduction(+:Var)
|
||||
while (1);
|
||||
|
||||
@@ -117,12 +117,12 @@ void TemplUses(T Parm, U CoS, V ChC) {
|
||||
while (1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'num_gangs' clause with more than 1 argument may not appear on a 'parallel' construct with a 'reduction' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'reduction' clause is here}}
|
||||
#pragma acc parallel reduction(+:Parm) num_gangs(Parm, Var)
|
||||
while (1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'reduction' clause may not appear on a 'parallel' construct with a 'num_gangs' clause with more than 1 argument}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc parallel num_gangs(Parm, Var) reduction(+:Var)
|
||||
while (1);
|
||||
|
||||
|
||||
@@ -33,22 +33,22 @@ void BoolExpr(int *I, float *F) {
|
||||
void WarnMaybeNotUsed(int val1, int val2) {
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel self if(val1)
|
||||
while(0);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel self(val1) if(val1)
|
||||
while(0);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel if(val1) self
|
||||
while(0);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel if(val1) self(val2)
|
||||
while(0);
|
||||
|
||||
|
||||
@@ -33,22 +33,22 @@ struct HasBool {
|
||||
template<typename T>
|
||||
void WarnMaybeNotUsed() {
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel self if(T::B)
|
||||
while(0);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel self(T::B) if(T::B)
|
||||
while(0);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel if(T::B) self
|
||||
while(0);
|
||||
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel if(T::B) self(T::B)
|
||||
while(0);
|
||||
|
||||
@@ -58,37 +58,37 @@ void WarnMaybeNotUsed() {
|
||||
// expected-error@+4{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-note@#NOT_USED_INST{{in instantiation of function template specialization 'WarnMaybeNotUsed<HasBool>' requested here}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel self if(T::Invalid)
|
||||
while(0);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel self(T::Invalid) if(T::B)
|
||||
while(0);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'self' clause is here}}
|
||||
#pragma acc parallel self(T::B) if(T::Invalid)
|
||||
while(0);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel if(T::Invalid) self
|
||||
while(0);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel if(T::Invalid) self(T::B)
|
||||
while(0);
|
||||
|
||||
// expected-error@+3{{no member named 'Invalid' in 'HasBool'}}
|
||||
// expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc parallel if(T::B) self(T::Invalid)
|
||||
while(0);
|
||||
}
|
||||
|
||||
@@ -9,24 +9,24 @@ void Test() {
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'vector_length' clause cannot appear more than once on a 'kernels' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector_length' clause is here}}
|
||||
#pragma acc kernels vector_length(1) vector_length(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'vector_length' clause cannot appear more than once on a 'parallel' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector_length' clause is here}}
|
||||
#pragma acc parallel vector_length(1) vector_length(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'vector_length' clause cannot appear more than once in a 'device_type' region on a 'kernels' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector_length' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc kernels vector_length(1) device_type(*) vector_length(1) vector_length(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'vector_length' clause cannot appear more than once in a 'device_type' region on a 'parallel' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector_length' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc parallel device_type(*) vector_length(1) vector_length(2)
|
||||
while(1);
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ void Test() {
|
||||
;
|
||||
|
||||
// expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'async' clause is here}}
|
||||
#pragma acc data copyin(I) async(I) async(I)
|
||||
;
|
||||
// expected-error@+2{{expected ')'}}
|
||||
@@ -33,39 +33,39 @@ void Test() {
|
||||
#pragma acc enter data copyin(I) async(I, I)
|
||||
//
|
||||
// expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'async' clause is here}}
|
||||
#pragma acc data default(none) async async
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'async' clause is here}}
|
||||
#pragma acc data default(none) async(1) async(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'async' clause is here}}
|
||||
#pragma acc data default(none) async(1) async(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'async' clause cannot appear more than once in a 'device_type' region on a 'data' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'async' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) async(1) device_type(*) async(1) async(2)
|
||||
while(1);
|
||||
// expected-error@+3{{OpenACC 'async' clause cannot appear more than once in a 'device_type' region on a 'data' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'async' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) async device_type(*) async async
|
||||
while(1);
|
||||
// expected-error@+3{{OpenACC 'async' clause cannot appear more than once in a 'device_type' region on a 'data' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'async' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) async(1) device_type(*) async async(2)
|
||||
while(1);
|
||||
|
||||
// expected-error@+3{{OpenACC 'async' clause cannot appear more than once in a 'device_type' region on a 'data' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'async' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) async async
|
||||
while(1);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ void use() {
|
||||
#pragma acc data default(none)
|
||||
;
|
||||
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default' clause is here}}
|
||||
#pragma acc data default(none) default(present)
|
||||
;
|
||||
// expected-error@+2{{OpenACC 'enter data' construct must have at least one 'attach', 'copyin', or 'create' clause}}
|
||||
|
||||
@@ -12,44 +12,44 @@ void uses() {
|
||||
;
|
||||
|
||||
// expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(radeon) if(1)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'copy' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(radeon) copy(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'copyin' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(radeon) copyin(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'copyout' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(radeon) copyout(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'create' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(radeon) create(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'no_create' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(radeon) no_create(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'present' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(radeon) present(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'deviceptr' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(radeon) deviceptr(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'attach' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(radeon) attach(Var)
|
||||
;
|
||||
// expected-error@+3{{OpenACC 'data' construct must have at least one 'attach', 'copy', 'copyin', 'copyout', 'create', 'default', 'deviceptr', 'no_create', or 'present' clause}}
|
||||
// expected-error@+2{{OpenACC clause 'default' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data device_type(radeon) default(none)
|
||||
;
|
||||
}
|
||||
|
||||
@@ -5,25 +5,25 @@ void Foo() {
|
||||
#pragma acc data default(present) if(1)
|
||||
;
|
||||
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc data default(present) if(1) if (2)
|
||||
;
|
||||
|
||||
#pragma acc enter data copyin(Var) if(1)
|
||||
|
||||
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'enter data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc enter data copyin(Var) if(1) if (2)
|
||||
|
||||
#pragma acc exit data copyout(Var) if(1)
|
||||
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'exit data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc exit data copyout(Var) if(1) if (2)
|
||||
|
||||
#pragma acc host_data use_device(Var) if(1)
|
||||
;
|
||||
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'host_data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc host_data use_device(Var) if(1) if (2)
|
||||
;
|
||||
}
|
||||
|
||||
@@ -110,43 +110,43 @@ void AtLeastOneOf() {
|
||||
void DataRules() {
|
||||
int Var;
|
||||
// expected-error@+2{{OpenACC clause 'copy' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) copy(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'copyin' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) copyin(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'copyout' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) copyout(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'create' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) create(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'no_create' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) no_create(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'present' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) present(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'deviceptr' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) deviceptr(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'attach' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) attach(Var)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'default' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) default(none)
|
||||
;
|
||||
// expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a 'data' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc data default(none) device_type(*) if(Var)
|
||||
;
|
||||
#pragma acc data default(none) device_type(*) async
|
||||
@@ -174,7 +174,7 @@ void HostDataRules() {
|
||||
int Var, Var2;
|
||||
// expected-error@+3{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}
|
||||
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'host_data' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc host_data if(Var) if (Var2)
|
||||
;
|
||||
|
||||
|
||||
@@ -43,11 +43,11 @@ void TestInst() {
|
||||
#pragma acc init if (T::value < T{})
|
||||
#pragma acc init device_type(radeon) device_num(getI()) if (getI() < getS())
|
||||
// expected-error@+2{{OpenACC 'device_num' clause cannot appear more than once on a 'init' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'device_num' clause is here}}
|
||||
#pragma acc init device_type(multicore) device_type(host) device_num(t) if (t < T::value) device_num(getI())
|
||||
|
||||
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'init' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc init if(t < T::value) if (getI() < getS())
|
||||
|
||||
// expected-error@+1{{value of type 'const NotConvertible' is not contextually convertible to 'bool'}}
|
||||
|
||||
@@ -9,40 +9,40 @@ void uses() {
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'auto' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'auto' clause is here}}
|
||||
#pragma acc loop auto seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'independent' may not appear on the same construct as a 'auto' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'auto' clause is here}}
|
||||
#pragma acc loop auto independent
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc loop seq auto
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc loop seq independent
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'independent' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'independent' clause is here}}
|
||||
#pragma acc loop independent auto
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'independent' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'independent' clause is here}}
|
||||
#pragma acc loop independent seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc loop seq seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'independent' may not appear on the same construct as a 'independent' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'independent' clause is here}}
|
||||
#pragma acc loop independent independent
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'auto' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'auto' clause is here}}
|
||||
#pragma acc loop auto auto
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
|
||||
@@ -589,19 +589,19 @@ void uses() {
|
||||
|
||||
// 'seq' cannot be combined with 'gang', 'worker' or 'vector'
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc loop seq gang
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'gang' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc loop gang seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc loop seq worker
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc loop seq vector
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+1{{OpenACC 'finalize' clause is not valid on 'loop' directive}}
|
||||
@@ -733,15 +733,15 @@ void uses() {
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'gang' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc loop gang seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'worker' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc loop worker seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'vector' clause on a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc loop vector seq
|
||||
for(unsigned i = 0; i < 5; ++i);
|
||||
// expected-error@+1{{OpenACC 'finalize' clause is not valid on 'loop' directive}}
|
||||
|
||||
@@ -16,7 +16,7 @@ void only_for_loops() {
|
||||
|
||||
void only_one_on_loop() {
|
||||
// expected-error@+2{{OpenACC 'collapse' clause cannot appear more than once on a 'loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'collapse' clause is here}}
|
||||
#pragma acc loop collapse(1) collapse(1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
@@ -530,8 +530,8 @@ void allow_multiple_collapse() {
|
||||
|
||||
void no_dupes_since_last_device_type() {
|
||||
// expected-error@+3{{OpenACC 'collapse' clause cannot appear more than once in a 'device_type' region on a 'loop' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'collapse' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc loop collapse(1) device_type(*) collapse(1) collapse(2)
|
||||
for(unsigned i = 0; i < 5; ++i)
|
||||
for(unsigned j = 0; j < 5; ++j);
|
||||
|
||||
@@ -116,7 +116,7 @@ void uses() {
|
||||
#pragma acc loop device_type(*) present(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'private' may not follow a 'device_type' clause in a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc loop device_type(*) private(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+1{{OpenACC 'copyout' clause is not valid on 'loop' directive}}
|
||||
@@ -147,7 +147,7 @@ void uses() {
|
||||
#pragma acc loop device_type(*) present_or_create(Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
// expected-error@+2{{OpenACC clause 'reduction' may not follow a 'device_type' clause in a 'loop' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc loop device_type(*) reduction(+:Var)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
#pragma acc loop device_type(*) collapse(1)
|
||||
|
||||
@@ -239,13 +239,13 @@ void KernelsTempl() {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{'num' argument to 'gang' clause not allowed on a 'loop' construct associated with a 'kernels' construct that has a 'num_gangs' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels num_gangs(t)
|
||||
#pragma acc loop gang(t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{'num' argument to 'gang' clause not allowed on a 'loop' construct associated with a 'kernels' construct that has a 'num_gangs' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels num_gangs(t)
|
||||
#pragma acc loop gang(num:t)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
@@ -264,13 +264,13 @@ void Kernels() {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{'num' argument to 'gang' clause not allowed on a 'loop' construct associated with a 'kernels' construct that has a 'num_gangs' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels num_gangs(1)
|
||||
#pragma acc loop gang(1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{'num' argument to 'gang' clause not allowed on a 'loop' construct associated with a 'kernels' construct that has a 'num_gangs' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc kernels num_gangs(1)
|
||||
#pragma acc loop gang(num:1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
@@ -279,7 +279,7 @@ void Kernels() {
|
||||
#pragma acc loop gang(num:1)
|
||||
for(int j = 0; j < 5; ++j) {
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'gang' clause on a 'kernels' construct}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'gang' clause is here}}
|
||||
#pragma acc loop gang(static:1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ void uses() {
|
||||
#pragma acc loop reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -66,7 +66,7 @@ void uses() {
|
||||
#pragma acc loop reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -79,7 +79,7 @@ void uses() {
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
#pragma acc serial
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@-4{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -88,7 +88,7 @@ void uses() {
|
||||
|
||||
#pragma acc serial reduction(+:I)
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-2{{previous clause is here}}
|
||||
// expected-note@-2{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i){}
|
||||
|
||||
@@ -96,7 +96,7 @@ void uses() {
|
||||
#pragma acc loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (+ vs &)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc serial reduction(+:I)
|
||||
;
|
||||
}
|
||||
@@ -111,7 +111,7 @@ void uses() {
|
||||
#pragma acc parallel
|
||||
{
|
||||
// expected-error@+2{{OpenACC 'gang' clause with a 'dim' value greater than 1 cannot appear on the same 'loop' construct as a 'reduction' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(+:I) gang(dim:2)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -120,7 +120,7 @@ void uses() {
|
||||
#pragma acc parallel
|
||||
{
|
||||
// expected-error@+2{{OpenACC 'reduction' clause cannot appear on the same 'loop' construct as a 'gang' clause with a 'dim' value greater than 1}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc loop gang(dim:2) reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -129,7 +129,7 @@ void uses() {
|
||||
#pragma acc parallel
|
||||
{
|
||||
// expected-error@+2{{OpenACC 'reduction' clause cannot appear on the same 'loop' construct as a 'gang' clause with a 'dim' value greater than 1}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc loop gang gang(dim:1) gang(dim:2) reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -138,8 +138,8 @@ void uses() {
|
||||
#pragma acc parallel num_gangs(1, 2)
|
||||
{
|
||||
// expected-error@+3{{OpenACC 'reduction' clause cannot appear on the same 'loop' construct as a 'gang' clause inside a compute construct with a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@-4{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc loop gang(dim:1) reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -148,8 +148,8 @@ void uses() {
|
||||
#pragma acc parallel num_gangs(2, 3)
|
||||
{
|
||||
// expected-error@+3{{OpenACC 'gang' clause cannot appear on the same 'loop' construct as a 'reduction' clause inside a compute construct with a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'reduction' clause is here}}
|
||||
// expected-note@-4{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc loop reduction(+:I) gang(dim:1)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -190,7 +190,7 @@ void templ_uses() {
|
||||
#pragma acc loop reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -202,7 +202,7 @@ void templ_uses() {
|
||||
#pragma acc loop reduction(+:Array[3])
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(&:Array[3])
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -214,7 +214,7 @@ void templ_uses() {
|
||||
#pragma acc loop reduction(+:Array[0:3])
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(&:Array[1:4])
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -226,7 +226,7 @@ void templ_uses() {
|
||||
#pragma acc loop reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
// expected-error@+2{{OpenACC 'reduction' variable must have the same operator in all nested constructs (& vs +)}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-note@-3{{previous 'reduction' clause is here}}
|
||||
#pragma acc serial reduction(&:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -243,7 +243,7 @@ void templ_uses() {
|
||||
#pragma acc parallel
|
||||
{
|
||||
// expected-error@+2{{OpenACC 'gang' clause with a 'dim' value greater than 1 cannot appear on the same 'loop' construct as a 'reduction' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(+:I) gang(dim:2)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -252,7 +252,7 @@ void templ_uses() {
|
||||
#pragma acc parallel
|
||||
{
|
||||
// expected-error@+2{{OpenACC 'reduction' clause cannot appear on the same 'loop' construct as a 'gang' clause with a 'dim' value greater than 1}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc loop gang(dim:2) reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -260,7 +260,7 @@ void templ_uses() {
|
||||
#pragma acc parallel
|
||||
{
|
||||
// expected-error@+2{{OpenACC 'gang' clause with a 'dim' value greater than 1 cannot appear on the same 'loop' construct as a 'reduction' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'reduction' clause is here}}
|
||||
#pragma acc loop reduction(+:I) gang(dim:Two)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -269,7 +269,7 @@ void templ_uses() {
|
||||
#pragma acc parallel
|
||||
{
|
||||
// expected-error@+2{{OpenACC 'reduction' clause cannot appear on the same 'loop' construct as a 'gang' clause with a 'dim' value greater than 1}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc loop gang(dim:Two) reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -286,8 +286,8 @@ void templ_uses() {
|
||||
#pragma acc parallel num_gangs(Two, 1)
|
||||
{
|
||||
// expected-error@+3{{OpenACC 'gang' clause cannot appear on the same 'loop' construct as a 'reduction' clause inside a compute construct with a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'reduction' clause is here}}
|
||||
// expected-note@-4{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc loop reduction(+:I) gang(dim:One)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -296,8 +296,8 @@ void templ_uses() {
|
||||
#pragma acc parallel num_gangs(Two, 1)
|
||||
{
|
||||
// expected-error@+3{{OpenACC 'reduction' clause cannot appear on the same 'loop' construct as a 'gang' clause inside a compute construct with a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@-4{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc loop gang(dim:One) reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -313,8 +313,8 @@ void templ_uses() {
|
||||
#pragma acc parallel num_gangs(Two, 1)
|
||||
{
|
||||
// expected-error@+3{{OpenACC 'gang' clause cannot appear on the same 'loop' construct as a 'reduction' clause inside a compute construct with a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'reduction' clause is here}}
|
||||
// expected-note@-4{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc loop reduction(+:I) gang(dim:1)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -323,8 +323,8 @@ void templ_uses() {
|
||||
#pragma acc parallel num_gangs(Two, 1)
|
||||
{
|
||||
// expected-error@+3{{OpenACC 'reduction' clause cannot appear on the same 'loop' construct as a 'gang' clause inside a compute construct with a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@-4{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc loop gang(dim:1) reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -340,8 +340,8 @@ void templ_uses() {
|
||||
#pragma acc parallel num_gangs(2, 1)
|
||||
{
|
||||
// expected-error@+3{{OpenACC 'gang' clause cannot appear on the same 'loop' construct as a 'reduction' clause inside a compute construct with a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'reduction' clause is here}}
|
||||
// expected-note@-4{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc loop reduction(+:I) gang(dim:One)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
@@ -350,8 +350,8 @@ void templ_uses() {
|
||||
#pragma acc parallel num_gangs(2, 1)
|
||||
{
|
||||
// expected-error@+3{{OpenACC 'reduction' clause cannot appear on the same 'loop' construct as a 'gang' clause inside a compute construct with a 'num_gangs' clause with more than one argument}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@-4{{previous 'num_gangs' clause is here}}
|
||||
#pragma acc loop gang(dim:One) reduction(+:I)
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ void only_for_loops() {
|
||||
|
||||
void only_one_on_loop() {
|
||||
// expected-error@+2{{OpenACC 'tile' clause cannot appear more than once on a 'loop' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'tile' clause is here}}
|
||||
#pragma acc loop tile(1) tile(1)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
}
|
||||
@@ -410,8 +410,8 @@ void collapse_tile_depth() {
|
||||
}
|
||||
void no_dupes_since_last_device_type() {
|
||||
// expected-error@+3{{OpenACC 'tile' clause cannot appear more than once in a 'device_type' region on a 'loop' directive}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'tile' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc loop tile(1) device_type(*) tile(1) tile(2)
|
||||
for(unsigned i = 0; i < 5; ++i)
|
||||
for(unsigned j = 0; j < 5; ++j);
|
||||
|
||||
@@ -24,7 +24,7 @@ void TemplUses(Int I, NotInt NI, ConvertsToInt CTI) {
|
||||
for(int j = 0; j < 5; ++j);
|
||||
|
||||
// expected-error@+3{{'length' argument to 'vector' clause not allowed on a 'loop' construct associated with a 'kernels' construct that has a 'vector_length' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector_length' clause is here}}
|
||||
#pragma acc kernels vector_length(I)
|
||||
#pragma acc loop vector(length: CTI)
|
||||
for(int j = 0; j < 5; ++j);
|
||||
@@ -33,7 +33,7 @@ void TemplUses(Int I, NotInt NI, ConvertsToInt CTI) {
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
for(int j = 0; j < 5; ++j);
|
||||
// expected-error@+2{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@-4{{previous 'vector' clause is here}}
|
||||
#pragma acc loop vector
|
||||
for(int j = 0; j < 5; ++j);
|
||||
for(int j = 0; j < 5; ++j);
|
||||
@@ -45,7 +45,7 @@ void TemplUses(Int I, NotInt NI, ConvertsToInt CTI) {
|
||||
// expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-note@-6 3{{previous clause is here}}
|
||||
// expected-note@-6 3{{previous 'vector' clause is here}}
|
||||
#pragma acc loop vector, worker, gang
|
||||
for(int j = 0; j < 5; ++j);
|
||||
for(int j = 0; j < 5; ++j);
|
||||
@@ -93,7 +93,7 @@ void uses() {
|
||||
for(int j = 0; j < 5; ++j);
|
||||
|
||||
// expected-error@+3{{'length' argument to 'vector' clause not allowed on a 'loop' construct associated with a 'kernels' construct that has a 'vector_length' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector_length' clause is here}}
|
||||
#pragma acc kernels vector_length(i)
|
||||
#pragma acc loop vector(length: i)
|
||||
for(int j = 0; j < 5; ++j);
|
||||
@@ -102,7 +102,7 @@ void uses() {
|
||||
for(int i = 0; i < 5; ++i) {
|
||||
for(int j = 0; j < 5; ++j);
|
||||
// expected-error@+2{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@-4{{previous 'vector' clause is here}}
|
||||
#pragma acc loop vector
|
||||
for(int j = 0; j < 5; ++j);
|
||||
for(int j = 0; j < 5; ++j);
|
||||
@@ -121,7 +121,7 @@ void uses() {
|
||||
// expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}
|
||||
// expected-note@-6 3{{previous clause is here}}
|
||||
// expected-note@-6 3{{previous 'vector' clause is here}}
|
||||
#pragma acc loop vector, worker, gang
|
||||
for(int j = 0; j < 5; ++j);
|
||||
for(int j = 0; j < 5; ++j);
|
||||
|
||||
@@ -42,7 +42,7 @@ void TemplUses(NotInt NI, ConvertsToInt CTI, Int IsI) {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{'num' argument to 'worker' clause not allowed on a 'loop' construct associated with a 'kernels' construct that has a 'num_workers' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_workers' clause is here}}
|
||||
#pragma acc kernels num_workers(IsI)
|
||||
#pragma acc loop worker(num:CTI)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
@@ -124,7 +124,7 @@ void uses() {
|
||||
for(int i = 0; i < 5; ++i);
|
||||
|
||||
// expected-error@+3{{'num' argument to 'worker' clause not allowed on a 'loop' construct associated with a 'kernels' construct that has a 'num_workers' clause}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'num_workers' clause is here}}
|
||||
#pragma acc kernels num_workers(i)
|
||||
#pragma acc loop worker(num:i)
|
||||
for(int i = 0; i < 5; ++i);
|
||||
@@ -133,7 +133,7 @@ void uses() {
|
||||
for(int i= 0; i< 5; ++i) {
|
||||
// expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-4 2{{previous clause is here}}
|
||||
// expected-note@-4 2{{previous 'worker' clause is here}}
|
||||
#pragma acc loop worker, gang
|
||||
for(int k = 0; k < 5; ++k);
|
||||
}
|
||||
@@ -157,7 +157,7 @@ void uses() {
|
||||
for(int i= 0; i< 5; ++i) {
|
||||
// expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-4 2{{previous clause is here}}
|
||||
// expected-note@-4 2{{previous 'worker' clause is here}}
|
||||
#pragma acc loop worker, gang
|
||||
for(int k = 0; k < 5; ++k);
|
||||
}
|
||||
@@ -175,7 +175,7 @@ void uses() {
|
||||
for(int i= 0; i< 5; ++i) {
|
||||
// expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-4 2{{previous clause is here}}
|
||||
// expected-note@-4 2{{previous 'worker' clause is here}}
|
||||
#pragma acc loop worker, gang
|
||||
for(int k = 0; k < 5; ++k);
|
||||
}
|
||||
@@ -193,7 +193,7 @@ void uses() {
|
||||
for(int i= 0; i< 5; ++i) {
|
||||
// expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'worker' clause}}
|
||||
// expected-note@-4 2{{previous clause is here}}
|
||||
// expected-note@-4 2{{previous 'worker' clause is here}}
|
||||
#pragma acc loop worker, gang
|
||||
for(int k = 0; k < 5; ++k);
|
||||
}
|
||||
|
||||
@@ -8,62 +8,62 @@ void Func2();
|
||||
#pragma acc routine(Func) nohost seq
|
||||
#pragma acc routine(Func) gang
|
||||
// expected-error@+2{{OpenACC clause 'bind' may not appear on the same construct as a 'bind' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'bind' clause is here}}
|
||||
#pragma acc routine(Func) gang bind(a) bind(a)
|
||||
|
||||
// expected-error@+2{{OpenACC clause 'bind' may not appear on the same construct as a 'bind' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'bind' clause is here}}
|
||||
#pragma acc routine gang bind(a) bind(a)
|
||||
void DupeImplName();
|
||||
|
||||
// Only 1 of worker, vector, seq, gang.
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine(Func) worker vector
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine(Func) worker seq
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine(Func) worker gang
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine(Func) worker worker
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine(Func) vector worker
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine(Func) vector seq
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine(Func) vector gang
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine(Func) vector vector
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine(Func) seq worker
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine(Func) seq vector
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine(Func) seq gang
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine(Func) seq seq
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine(Func) gang worker
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine(Func) gang vector
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine(Func) gang seq
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine(Func) gang gang
|
||||
// expected-error@+1{{OpenACC 'routine' construct must have at least one 'gang', 'seq', 'vector', or 'worker' clause}}
|
||||
#pragma acc routine(Func)
|
||||
@@ -153,10 +153,10 @@ void Func6();
|
||||
#pragma acc routine(Func6) seq device_type(*) bind(WhateverElse)
|
||||
#pragma acc routine(Func) seq dtype(*) device_type(*)
|
||||
// expected-error@+2{{OpenACC clause 'nohost' may not follow a 'dtype' clause in a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'dtype' clause here}}
|
||||
#pragma acc routine(Func) seq dtype(*) nohost
|
||||
// expected-error@+2{{OpenACC clause 'nohost' may not follow a 'device_type' clause in a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine(Func) seq device_type(*) nohost
|
||||
|
||||
// 2.15: a bind clause may not bind to a routine name that has a visible bind clause.
|
||||
@@ -165,7 +165,7 @@ void Func3();
|
||||
// OK: Doesn't have a bind
|
||||
#pragma acc routine(Func3) seq
|
||||
// expected-error@+2{{multiple 'routine' directives with 'bind' clauses are not permitted to refer to the same function}}
|
||||
// expected-note@-4{{previous clause is here}}
|
||||
// expected-note@-4{{previous 'bind' clause is here}}
|
||||
#pragma acc routine(Func3) seq bind("asdf")
|
||||
|
||||
void Func4();
|
||||
@@ -173,12 +173,12 @@ void Func4();
|
||||
#pragma acc routine(Func4) seq
|
||||
#pragma acc routine(Func4) seq bind("asdf")
|
||||
// expected-error@+2{{multiple 'routine' directives with 'bind' clauses are not permitted to refer to the same function}}
|
||||
// expected-note@-2{{previous clause is here}}
|
||||
// expected-note@-2{{previous 'bind' clause is here}}
|
||||
#pragma acc routine(Func4) seq bind("asdf")
|
||||
void Func5();
|
||||
#pragma acc routine(Func5) seq bind("asdf")
|
||||
// expected-error@+2{{multiple 'routine' directives with 'bind' clauses are not permitted to refer to the same function}}
|
||||
// expected-note@-2{{previous clause is here}}
|
||||
// expected-note@-2{{previous 'bind' clause is here}}
|
||||
#pragma acc routine(Func5) seq bind("asdf")
|
||||
// OK: Doesn't have a bind
|
||||
#pragma acc routine(Func5) seq
|
||||
@@ -196,15 +196,15 @@ void DupeBinds2();
|
||||
|
||||
#pragma acc routine bind("asdf") seq
|
||||
void DupeBinds3();
|
||||
// expected-error@+2{{OpenACC 'bind' clause on a declaration must bind to the same name as previous bind clauses}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-error@+2{{OpenACC 'bind' clause on a declaration must bind to the same name as previous 'bind' clauses}}
|
||||
// expected-note@-3{{previous 'bind' clause is here}}
|
||||
#pragma acc routine bind(asdf) seq
|
||||
void DupeBinds3();
|
||||
|
||||
void DupeBinds4();
|
||||
#pragma acc routine(DupeBinds4) bind(asdf) seq
|
||||
// expected-error@+2{{multiple 'routine' directives with 'bind' clauses are not permitted to refer to the same function}}
|
||||
// expected-note@-2{{previous clause is here}}
|
||||
// expected-note@-2{{previous 'bind' clause is here}}
|
||||
#pragma acc routine bind(asdf) seq
|
||||
void DupeBinds4();
|
||||
|
||||
@@ -216,15 +216,15 @@ void DupeBinds4b();
|
||||
|
||||
#pragma acc routine bind(asdf) seq
|
||||
void DupeBinds5();
|
||||
// expected-error@+2{{OpenACC 'bind' clause on a declaration must bind to the same name as previous bind clauses}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-error@+2{{OpenACC 'bind' clause on a declaration must bind to the same name as previous 'bind' clauses}}
|
||||
// expected-note@-3{{previous 'bind' clause is here}}
|
||||
#pragma acc routine bind(asdfDiff) seq
|
||||
void DupeBinds5();
|
||||
|
||||
#pragma acc routine bind("asdf") seq
|
||||
void DupeBinds6();
|
||||
// expected-error@+2{{OpenACC 'bind' clause on a declaration must bind to the same name as previous bind clauses}}
|
||||
// expected-note@-3{{previous clause is here}}
|
||||
// expected-error@+2{{OpenACC 'bind' clause on a declaration must bind to the same name as previous 'bind' clauses}}
|
||||
// expected-note@-3{{previous 'bind' clause is here}}
|
||||
#pragma acc routine bind("asdfDiff") seq
|
||||
void DupeBinds6();
|
||||
|
||||
@@ -234,67 +234,67 @@ void DupeBinds6();
|
||||
namespace FigureDupesAllowedAroundDeviceType {
|
||||
// Test conflicts without a device type
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine gang gang
|
||||
void Func1();
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine gang worker
|
||||
void Func2();
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine gang vector
|
||||
void Func3();
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine gang seq
|
||||
void Func4();
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine worker gang
|
||||
void Func5();
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine worker worker
|
||||
void Func6();
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine worker vector
|
||||
void Func7();
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine worker seq
|
||||
void Func8();
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine vector gang
|
||||
void Func9();
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine vector worker
|
||||
void Func10();
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine vector vector
|
||||
void Func11();
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine vector seq
|
||||
void Func12();
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine seq gang
|
||||
void Func13();
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine seq worker
|
||||
void Func14();
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine seq vector
|
||||
void Func15();
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine seq seq
|
||||
void Func16();
|
||||
// None included for one without a device type
|
||||
@@ -304,67 +304,67 @@ namespace FigureDupesAllowedAroundDeviceType {
|
||||
|
||||
// Check same conflicts for 'before' the device_type
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine gang gang device_type(*)
|
||||
void Func17();
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine gang worker device_type(*)
|
||||
void Func18();
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine gang vector device_type(*)
|
||||
void Func19();
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'gang' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'gang' clause is here}}
|
||||
#pragma acc routine gang seq device_type(*)
|
||||
void Func20();
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine worker gang device_type(*)
|
||||
void Func21();
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine worker worker device_type(*)
|
||||
void Func22();
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine worker vector device_type(*)
|
||||
void Func23();
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'worker' clause is here}}
|
||||
#pragma acc routine worker seq device_type(*)
|
||||
void Func24();
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine vector gang device_type(*)
|
||||
void Func25();
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine vector worker device_type(*)
|
||||
void Func26();
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine vector vector device_type(*)
|
||||
void Func27();
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'vector' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'vector' clause is here}}
|
||||
#pragma acc routine vector seq device_type(*)
|
||||
void Func28();
|
||||
// expected-error@+2{{OpenACC clause 'gang' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine seq gang device_type(*)
|
||||
void Func29();
|
||||
// expected-error@+2{{OpenACC clause 'worker' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine seq worker device_type(*)
|
||||
void Func30();
|
||||
// expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine seq vector device_type(*)
|
||||
void Func31();
|
||||
// expected-error@+2{{OpenACC clause 'seq' may not appear on the same construct as a 'seq' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'seq' clause is here}}
|
||||
#pragma acc routine seq seq device_type(*)
|
||||
void Func32();
|
||||
// None included for the device_type
|
||||
@@ -374,327 +374,327 @@ namespace FigureDupesAllowedAroundDeviceType {
|
||||
|
||||
// Conflicts between 'global' and 'device_type'
|
||||
// expected-error@+3{{OpenACC clause 'gang' after 'device_type' clause on a 'routine' conflicts with the 'gang' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine gang device_type(*) gang
|
||||
void Func34();
|
||||
// expected-error@+3{{OpenACC clause 'worker' after 'device_type' clause on a 'routine' conflicts with the 'gang' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine gang device_type(*) worker
|
||||
void Func35();
|
||||
// expected-error@+3{{OpenACC clause 'vector' after 'device_type' clause on a 'routine' conflicts with the 'gang' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine gang device_type(*) vector
|
||||
void Func36();
|
||||
// expected-error@+3{{OpenACC clause 'seq' after 'device_type' clause on a 'routine' conflicts with the 'gang' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine gang device_type(*) seq
|
||||
void Func37();
|
||||
// expected-error@+3{{OpenACC clause 'gang' after 'device_type' clause on a 'routine' conflicts with the 'worker' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine worker device_type(*) gang
|
||||
void Func38();
|
||||
// expected-error@+3{{OpenACC clause 'worker' after 'device_type' clause on a 'routine' conflicts with the 'worker' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine worker device_type(*) worker
|
||||
void Func39();
|
||||
// expected-error@+3{{OpenACC clause 'vector' after 'device_type' clause on a 'routine' conflicts with the 'worker' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine worker device_type(*) vector
|
||||
void Func40();
|
||||
// expected-error@+3{{OpenACC clause 'seq' after 'device_type' clause on a 'routine' conflicts with the 'worker' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine worker device_type(*) seq
|
||||
void Func41();
|
||||
// expected-error@+3{{OpenACC clause 'gang' after 'device_type' clause on a 'routine' conflicts with the 'vector' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine vector device_type(*) gang
|
||||
void Func42();
|
||||
// expected-error@+3{{OpenACC clause 'worker' after 'device_type' clause on a 'routine' conflicts with the 'vector' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine vector device_type(*) worker
|
||||
void Func43();
|
||||
// expected-error@+3{{OpenACC clause 'vector' after 'device_type' clause on a 'routine' conflicts with the 'vector' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine vector device_type(*) vector
|
||||
void Func44();
|
||||
// expected-error@+3{{OpenACC clause 'seq' after 'device_type' clause on a 'routine' conflicts with the 'vector' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine vector device_type(*) seq
|
||||
void Func45();
|
||||
// expected-error@+3{{OpenACC clause 'gang' after 'device_type' clause on a 'routine' conflicts with the 'seq' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine seq device_type(*) gang
|
||||
void Func46();
|
||||
// expected-error@+3{{OpenACC clause 'worker' after 'device_type' clause on a 'routine' conflicts with the 'seq' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine seq device_type(*) worker
|
||||
void Func47();
|
||||
// expected-error@+3{{OpenACC clause 'vector' after 'device_type' clause on a 'routine' conflicts with the 'seq' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine seq device_type(*) vector
|
||||
void Func48();
|
||||
// expected-error@+3{{OpenACC clause 'seq' after 'device_type' clause on a 'routine' conflicts with the 'seq' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine seq device_type(*) seq
|
||||
void Func49();
|
||||
|
||||
// Conflicts within same device_type
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) gang gang
|
||||
void Func50();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) gang worker
|
||||
void Func51();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) gang vector
|
||||
void Func52();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) gang seq
|
||||
void Func53();
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) worker gang
|
||||
void Func54();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) worker worker
|
||||
void Func55();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) worker vector
|
||||
void Func56();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) worker seq
|
||||
void Func57();
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) vector gang
|
||||
void Func58();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) vector worker
|
||||
void Func59();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) vector vector
|
||||
void Func60();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) vector seq
|
||||
void Func61();
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) seq gang
|
||||
void Func62();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) seq worker
|
||||
void Func63();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) seq vector
|
||||
void Func64();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) seq seq
|
||||
void Func65();
|
||||
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) gang gang device_type(nvidia) seq
|
||||
void Func66();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) gang worker device_type(nvidia) seq
|
||||
void Func67();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) gang vector device_type(nvidia) seq
|
||||
void Func68();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) gang seq device_type(nvidia) seq
|
||||
void Func69();
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) worker gang device_type(nvidia) seq
|
||||
void Func70();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) worker worker device_type(nvidia) seq
|
||||
void Func71();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) worker vector device_type(nvidia) seq
|
||||
void Func72();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) worker seq device_type(nvidia) seq
|
||||
void Func73();
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) vector gang device_type(nvidia) seq
|
||||
void Func74();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) vector worker device_type(nvidia) seq
|
||||
void Func75();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) vector vector device_type(nvidia) seq
|
||||
void Func76();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) vector seq device_type(nvidia) seq
|
||||
void Func77();
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) seq gang device_type(nvidia) seq
|
||||
void Func78();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) seq worker device_type(nvidia) seq
|
||||
void Func79();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) seq vector device_type(nvidia) seq
|
||||
void Func80();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(*) seq seq device_type(nvidia) seq
|
||||
void Func81();
|
||||
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) gang gang
|
||||
void Func82();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) gang worker
|
||||
void Func83();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) gang vector
|
||||
void Func84();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'gang' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'gang' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) gang seq
|
||||
void Func85();
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) worker gang
|
||||
void Func86();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) worker worker
|
||||
void Func87();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) worker vector
|
||||
void Func88();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'worker' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'worker' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) worker seq
|
||||
void Func89();
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) vector gang
|
||||
void Func90();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) vector worker
|
||||
void Func91();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) vector vector
|
||||
void Func92();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'vector' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'vector' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) vector seq
|
||||
void Func93();
|
||||
// expected-error@+3{{OpenACC clause 'gang' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) seq gang
|
||||
void Func94();
|
||||
// expected-error@+3{{OpenACC clause 'worker' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) seq worker
|
||||
void Func95();
|
||||
// expected-error@+3{{OpenACC clause 'vector' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) seq vector
|
||||
void Func96();
|
||||
// expected-error@+3{{OpenACC clause 'seq' on a 'routine' directive conflicts with the 'seq' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'seq' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine device_type(nvidia) seq device_type(*) seq seq
|
||||
void Func97();
|
||||
|
||||
@@ -736,36 +736,36 @@ namespace FigureDupesAllowedAroundDeviceType {
|
||||
|
||||
namespace BindDupes {
|
||||
// expected-error@+2{{OpenACC clause 'bind' may not appear on the same construct as a 'bind' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'bind' clause is here}}
|
||||
#pragma acc routine seq bind(asdf) bind(asdf)
|
||||
void Func1();
|
||||
// expected-error@+2{{OpenACC clause 'bind' may not appear on the same construct as a 'bind' clause on a 'routine' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'bind' clause is here}}
|
||||
#pragma acc routine seq bind(asdf) bind(asdf) device_type(*)
|
||||
void Func2();
|
||||
// expected-error@+3{{OpenACC clause 'bind' after 'device_type' clause on a 'routine' conflicts with the 'bind' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'bind' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine seq bind(asdf) device_type(*) bind(asdf)
|
||||
void Func3();
|
||||
// expected-error@+3{{OpenACC clause 'bind' after 'device_type' clause on a 'routine' conflicts with the 'bind' clause before the first 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'bind' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine seq bind(asdf) device_type(*) bind(asdf) device_type(*)
|
||||
void Func4();
|
||||
// expected-error@+3{{OpenACC clause 'bind' on a 'routine' directive conflicts with the 'bind' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'bind' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine seq device_type(*) bind(asdf) bind(asdf)
|
||||
void Func5();
|
||||
// expected-error@+3{{OpenACC clause 'bind' on a 'routine' directive conflicts with the 'bind' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'bind' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine seq device_type(*) bind(asdf) bind(asdf) device_type(*)
|
||||
void Func6();
|
||||
// expected-error@+3{{OpenACC clause 'bind' on a 'routine' directive conflicts with the 'bind' clause applying to the same 'device_type'}}
|
||||
// expected-note@+2{{previous clause is here}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+2{{previous 'bind' clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc routine seq device_type(*) bind(asdf) device_type(*) bind(asdf) bind(asdf)
|
||||
void Func7();
|
||||
|
||||
|
||||
@@ -54,18 +54,18 @@ void uses() {
|
||||
#pragma acc set if (true)
|
||||
|
||||
// expected-error@+2{{'default_async' clause cannot appear more than once on a 'set' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'default_async' clause is here}}
|
||||
#pragma acc set default_async(getI()) default_async(getI())
|
||||
|
||||
// expected-error@+2{{'device_num' clause cannot appear more than once on a 'set' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'device_num' clause is here}}
|
||||
#pragma acc set device_num(getI()) device_num(getI())
|
||||
|
||||
// expected-error@+2{{'device_type' clause cannot appear more than once on a 'set' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'device_type' clause is here}}
|
||||
#pragma acc set device_type(nvidia) device_type(default)
|
||||
// expected-error@+2{{'if' clause cannot appear more than once on a 'set' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc set device_type(acc_device_nvidia) if(true) if (true)
|
||||
|
||||
// expected-error@+2{{OpenACC 'device_type' clause on a 'set' construct only permits one architecture}}
|
||||
|
||||
@@ -43,14 +43,14 @@ void TestInst() {
|
||||
#pragma acc shutdown if (T::value < T{})
|
||||
#pragma acc shutdown device_type(multicore) device_num(getI()) if (getI() < getS())
|
||||
// expected-error@+2{{OpenACC 'device_num' clause cannot appear more than once on a 'shutdown' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'device_num' clause is here}}
|
||||
#pragma acc shutdown device_type(default) device_type(radeon) device_num(t) if (t < T::value) device_num(getI())
|
||||
|
||||
// expected-error@+1{{value of type 'const NotConvertible' is not contextually convertible to 'bool'}}
|
||||
#pragma acc shutdown if (T::NCValue)
|
||||
|
||||
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'shutdown' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc shutdown if(t < T::value) if (getI() < getS())
|
||||
|
||||
// expected-error@+1{{OpenACC clause 'device_num' requires expression of integer type ('const NotConvertible' invalid)}}
|
||||
|
||||
@@ -14,19 +14,19 @@ void uses() {
|
||||
#pragma acc update device(Var)
|
||||
|
||||
// expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a 'update' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc update self(Var) device_type(default) if(true)
|
||||
// expected-error@+2{{OpenACC clause 'if_present' may not follow a 'device_type' clause in a 'update' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc update self(Var) device_type(multicore) if_present
|
||||
// expected-error@+2{{OpenACC clause 'self' may not follow a 'device_type' clause in a 'update' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc update self(Var) device_type(nvidia) self(Var)
|
||||
// expected-error@+2{{OpenACC clause 'host' may not follow a 'device_type' clause in a 'update' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc update self(Var) device_type(radeon) host(Var)
|
||||
// expected-error@+2{{OpenACC clause 'device' may not follow a 'device_type' clause in a 'update' construct}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{active 'device_type' clause here}}
|
||||
#pragma acc update self(Var) device_type(multicore) device(Var)
|
||||
// These 2 are OK.
|
||||
#pragma acc update self(Var) device_type(default) async
|
||||
@@ -51,7 +51,7 @@ void uses() {
|
||||
#pragma acc update self(Var) if (NC) device_type(radeon)
|
||||
|
||||
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'update' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'if' clause is here}}
|
||||
#pragma acc update self(Var) if(true) if (false)
|
||||
|
||||
// Cannot be the body of an 'if', 'while', 'do', 'switch', or
|
||||
@@ -89,7 +89,7 @@ void uses() {
|
||||
// expected-note@+1{{to match this '('}}
|
||||
#pragma acc update self(Var) async(getI(), getI())
|
||||
// expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'update' directive}}
|
||||
// expected-note@+1{{previous clause is here}}
|
||||
// expected-note@+1{{previous 'async' clause is here}}
|
||||
#pragma acc update self(Var) async(getI()) async(getI())
|
||||
// expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}}
|
||||
#pragma acc update self(Var) async(NC)
|
||||
|
||||
Reference in New Issue
Block a user