forked from OSchip/llvm-project
[OPENMP] Formatting and code improvement, NFC.
llvm-svn: 330634
This commit is contained in:
parent
38ec4bec46
commit
61908f651e
clang/lib/Parse
|
@ -80,51 +80,56 @@ static unsigned getOpenMPDirectiveKindEx(StringRef S) {
|
|||
.Default(OMPD_unknown);
|
||||
}
|
||||
|
||||
static OpenMPDirectiveKind ParseOpenMPDirectiveKind(Parser &P) {
|
||||
static OpenMPDirectiveKind parseOpenMPDirectiveKind(Parser &P) {
|
||||
// Array of foldings: F[i][0] F[i][1] ===> F[i][2].
|
||||
// E.g.: OMPD_for OMPD_simd ===> OMPD_for_simd
|
||||
// TODO: add other combined directives in topological order.
|
||||
static const unsigned F[][3] = {
|
||||
{ OMPD_cancellation, OMPD_point, OMPD_cancellation_point },
|
||||
{ OMPD_declare, OMPD_reduction, OMPD_declare_reduction },
|
||||
{ OMPD_declare, OMPD_simd, OMPD_declare_simd },
|
||||
{ OMPD_declare, OMPD_target, OMPD_declare_target },
|
||||
{ OMPD_distribute, OMPD_parallel, OMPD_distribute_parallel },
|
||||
{ OMPD_distribute_parallel, OMPD_for, OMPD_distribute_parallel_for },
|
||||
{ OMPD_distribute_parallel_for, OMPD_simd,
|
||||
OMPD_distribute_parallel_for_simd },
|
||||
{ OMPD_distribute, OMPD_simd, OMPD_distribute_simd },
|
||||
{ OMPD_end, OMPD_declare, OMPD_end_declare },
|
||||
{ OMPD_end_declare, OMPD_target, OMPD_end_declare_target },
|
||||
{ OMPD_target, OMPD_data, OMPD_target_data },
|
||||
{ OMPD_target, OMPD_enter, OMPD_target_enter },
|
||||
{ OMPD_target, OMPD_exit, OMPD_target_exit },
|
||||
{ OMPD_target, OMPD_update, OMPD_target_update },
|
||||
{ OMPD_target_enter, OMPD_data, OMPD_target_enter_data },
|
||||
{ OMPD_target_exit, OMPD_data, OMPD_target_exit_data },
|
||||
{ OMPD_for, OMPD_simd, OMPD_for_simd },
|
||||
{ OMPD_parallel, OMPD_for, OMPD_parallel_for },
|
||||
{ OMPD_parallel_for, OMPD_simd, OMPD_parallel_for_simd },
|
||||
{ OMPD_parallel, OMPD_sections, OMPD_parallel_sections },
|
||||
{ OMPD_taskloop, OMPD_simd, OMPD_taskloop_simd },
|
||||
{ OMPD_target, OMPD_parallel, OMPD_target_parallel },
|
||||
{ OMPD_target, OMPD_simd, OMPD_target_simd },
|
||||
{ OMPD_target_parallel, OMPD_for, OMPD_target_parallel_for },
|
||||
{ OMPD_target_parallel_for, OMPD_simd, OMPD_target_parallel_for_simd },
|
||||
{ OMPD_teams, OMPD_distribute, OMPD_teams_distribute },
|
||||
{ OMPD_teams_distribute, OMPD_simd, OMPD_teams_distribute_simd },
|
||||
{ OMPD_teams_distribute, OMPD_parallel, OMPD_teams_distribute_parallel },
|
||||
{ OMPD_teams_distribute_parallel, OMPD_for, OMPD_teams_distribute_parallel_for },
|
||||
{ OMPD_teams_distribute_parallel_for, OMPD_simd, OMPD_teams_distribute_parallel_for_simd },
|
||||
{ OMPD_target, OMPD_teams, OMPD_target_teams },
|
||||
{ OMPD_target_teams, OMPD_distribute, OMPD_target_teams_distribute },
|
||||
{ OMPD_target_teams_distribute, OMPD_parallel, OMPD_target_teams_distribute_parallel },
|
||||
{ OMPD_target_teams_distribute, OMPD_simd, OMPD_target_teams_distribute_simd },
|
||||
{ OMPD_target_teams_distribute_parallel, OMPD_for, OMPD_target_teams_distribute_parallel_for },
|
||||
{ OMPD_target_teams_distribute_parallel_for, OMPD_simd, OMPD_target_teams_distribute_parallel_for_simd }
|
||||
};
|
||||
{OMPD_cancellation, OMPD_point, OMPD_cancellation_point},
|
||||
{OMPD_declare, OMPD_reduction, OMPD_declare_reduction},
|
||||
{OMPD_declare, OMPD_simd, OMPD_declare_simd},
|
||||
{OMPD_declare, OMPD_target, OMPD_declare_target},
|
||||
{OMPD_distribute, OMPD_parallel, OMPD_distribute_parallel},
|
||||
{OMPD_distribute_parallel, OMPD_for, OMPD_distribute_parallel_for},
|
||||
{OMPD_distribute_parallel_for, OMPD_simd,
|
||||
OMPD_distribute_parallel_for_simd},
|
||||
{OMPD_distribute, OMPD_simd, OMPD_distribute_simd},
|
||||
{OMPD_end, OMPD_declare, OMPD_end_declare},
|
||||
{OMPD_end_declare, OMPD_target, OMPD_end_declare_target},
|
||||
{OMPD_target, OMPD_data, OMPD_target_data},
|
||||
{OMPD_target, OMPD_enter, OMPD_target_enter},
|
||||
{OMPD_target, OMPD_exit, OMPD_target_exit},
|
||||
{OMPD_target, OMPD_update, OMPD_target_update},
|
||||
{OMPD_target_enter, OMPD_data, OMPD_target_enter_data},
|
||||
{OMPD_target_exit, OMPD_data, OMPD_target_exit_data},
|
||||
{OMPD_for, OMPD_simd, OMPD_for_simd},
|
||||
{OMPD_parallel, OMPD_for, OMPD_parallel_for},
|
||||
{OMPD_parallel_for, OMPD_simd, OMPD_parallel_for_simd},
|
||||
{OMPD_parallel, OMPD_sections, OMPD_parallel_sections},
|
||||
{OMPD_taskloop, OMPD_simd, OMPD_taskloop_simd},
|
||||
{OMPD_target, OMPD_parallel, OMPD_target_parallel},
|
||||
{OMPD_target, OMPD_simd, OMPD_target_simd},
|
||||
{OMPD_target_parallel, OMPD_for, OMPD_target_parallel_for},
|
||||
{OMPD_target_parallel_for, OMPD_simd, OMPD_target_parallel_for_simd},
|
||||
{OMPD_teams, OMPD_distribute, OMPD_teams_distribute},
|
||||
{OMPD_teams_distribute, OMPD_simd, OMPD_teams_distribute_simd},
|
||||
{OMPD_teams_distribute, OMPD_parallel, OMPD_teams_distribute_parallel},
|
||||
{OMPD_teams_distribute_parallel, OMPD_for,
|
||||
OMPD_teams_distribute_parallel_for},
|
||||
{OMPD_teams_distribute_parallel_for, OMPD_simd,
|
||||
OMPD_teams_distribute_parallel_for_simd},
|
||||
{OMPD_target, OMPD_teams, OMPD_target_teams},
|
||||
{OMPD_target_teams, OMPD_distribute, OMPD_target_teams_distribute},
|
||||
{OMPD_target_teams_distribute, OMPD_parallel,
|
||||
OMPD_target_teams_distribute_parallel},
|
||||
{OMPD_target_teams_distribute, OMPD_simd,
|
||||
OMPD_target_teams_distribute_simd},
|
||||
{OMPD_target_teams_distribute_parallel, OMPD_for,
|
||||
OMPD_target_teams_distribute_parallel_for},
|
||||
{OMPD_target_teams_distribute_parallel_for, OMPD_simd,
|
||||
OMPD_target_teams_distribute_parallel_for_simd}};
|
||||
enum { CancellationPoint = 0, DeclareReduction = 1, TargetData = 2 };
|
||||
auto Tok = P.getCurToken();
|
||||
Token Tok = P.getCurToken();
|
||||
unsigned DKind =
|
||||
Tok.isAnnotation()
|
||||
? static_cast<unsigned>(OMPD_unknown)
|
||||
|
@ -132,8 +137,8 @@ static OpenMPDirectiveKind ParseOpenMPDirectiveKind(Parser &P) {
|
|||
if (DKind == OMPD_unknown)
|
||||
return OMPD_unknown;
|
||||
|
||||
for (unsigned i = 0; i < llvm::array_lengthof(F); ++i) {
|
||||
if (DKind != F[i][0])
|
||||
for (unsigned I = 0; I < llvm::array_lengthof(F); ++I) {
|
||||
if (DKind != F[I][0])
|
||||
continue;
|
||||
|
||||
Tok = P.getPreprocessor().LookAhead(0);
|
||||
|
@ -144,9 +149,9 @@ static OpenMPDirectiveKind ParseOpenMPDirectiveKind(Parser &P) {
|
|||
if (SDKind == OMPD_unknown)
|
||||
continue;
|
||||
|
||||
if (SDKind == F[i][1]) {
|
||||
if (SDKind == F[I][1]) {
|
||||
P.ConsumeToken();
|
||||
DKind = F[i][2];
|
||||
DKind = F[I][2];
|
||||
}
|
||||
}
|
||||
return DKind < OMPD_unknown ? static_cast<OpenMPDirectiveKind>(DKind)
|
||||
|
@ -253,7 +258,7 @@ Parser::ParseOpenMPDeclareReductionDirective(AccessSpecifier AS) {
|
|||
TypeResult TR =
|
||||
ParseTypeName(&Range, DeclaratorContext::PrototypeContext, AS);
|
||||
if (TR.isUsable()) {
|
||||
auto ReductionType =
|
||||
QualType ReductionType =
|
||||
Actions.ActOnOpenMPDeclareReductionType(Range.getBegin(), TR);
|
||||
if (!ReductionType.isNull()) {
|
||||
ReductionTypes.push_back(
|
||||
|
@ -300,7 +305,7 @@ Parser::ParseOpenMPDeclareReductionDirective(AccessSpecifier AS) {
|
|||
// Parse <combiner> expression and then parse initializer if any for each
|
||||
// correct type.
|
||||
unsigned I = 0, E = ReductionTypes.size();
|
||||
for (auto *D : DRD.get()) {
|
||||
for (Decl *D : DRD.get()) {
|
||||
TentativeParsingAction TPA(*this);
|
||||
ParseScope OMPDRScope(this, Scope::FnScope | Scope::DeclScope |
|
||||
Scope::CompoundStmtScope |
|
||||
|
@ -323,9 +328,9 @@ Parser::ParseOpenMPDeclareReductionDirective(AccessSpecifier AS) {
|
|||
if (Tok.isNot(tok::annot_pragma_openmp_end)) {
|
||||
// Parse <initializer> expression.
|
||||
if (Tok.is(tok::identifier) &&
|
||||
Tok.getIdentifierInfo()->isStr("initializer"))
|
||||
Tok.getIdentifierInfo()->isStr("initializer")) {
|
||||
ConsumeToken();
|
||||
else {
|
||||
} else {
|
||||
Diag(Tok.getLocation(), diag::err_expected) << "'initializer'";
|
||||
TPA.Commit();
|
||||
IsCorrect = false;
|
||||
|
@ -551,7 +556,7 @@ static bool parseDeclareSimdClauses(
|
|||
if (CKind == OMPC_uniform || CKind == OMPC_aligned ||
|
||||
CKind == OMPC_linear) {
|
||||
Parser::OpenMPVarListDataTy Data;
|
||||
auto *Vars = &Uniforms;
|
||||
SmallVectorImpl<Expr *> *Vars = &Uniforms;
|
||||
if (CKind == OMPC_aligned)
|
||||
Vars = &Aligneds;
|
||||
else if (CKind == OMPC_linear)
|
||||
|
@ -561,9 +566,9 @@ static bool parseDeclareSimdClauses(
|
|||
if (P.ParseOpenMPVarList(OMPD_declare_simd,
|
||||
getOpenMPClauseKind(ClauseName), *Vars, Data))
|
||||
IsError = true;
|
||||
if (CKind == OMPC_aligned)
|
||||
if (CKind == OMPC_aligned) {
|
||||
Alignments.append(Aligneds.size() - Alignments.size(), Data.TailExpr);
|
||||
else if (CKind == OMPC_linear) {
|
||||
} else if (CKind == OMPC_linear) {
|
||||
if (P.getActions().CheckOpenMPLinearModifier(Data.LinKind,
|
||||
Data.DepLinMapLoc))
|
||||
Data.LinKind = OMPC_LINEAR_val;
|
||||
|
@ -613,12 +618,11 @@ Parser::ParseOMPDeclareSimdClauses(Parser::DeclGroupPtrTy Ptr,
|
|||
}
|
||||
// Skip the last annot_pragma_openmp_end.
|
||||
SourceLocation EndLoc = ConsumeAnnotationToken();
|
||||
if (!IsError) {
|
||||
return Actions.ActOnOpenMPDeclareSimdDirective(
|
||||
Ptr, BS, Simdlen.get(), Uniforms, Aligneds, Alignments, Linears,
|
||||
LinModifiers, Steps, SourceRange(Loc, EndLoc));
|
||||
}
|
||||
return Ptr;
|
||||
if (IsError)
|
||||
return Ptr;
|
||||
return Actions.ActOnOpenMPDeclareSimdDirective(
|
||||
Ptr, BS, Simdlen.get(), Uniforms, Aligneds, Alignments, Linears,
|
||||
LinModifiers, Steps, SourceRange(Loc, EndLoc));
|
||||
}
|
||||
|
||||
/// \brief Parsing of declarative OpenMP directives.
|
||||
|
@ -643,7 +647,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(
|
|||
ParenBraceBracketBalancer BalancerRAIIObj(*this);
|
||||
|
||||
SourceLocation Loc = ConsumeAnnotationToken();
|
||||
auto DKind = ParseOpenMPDirectiveKind(*this);
|
||||
OpenMPDirectiveKind DKind = parseOpenMPDirectiveKind(*this);
|
||||
|
||||
switch (DKind) {
|
||||
case OMPD_threadprivate: {
|
||||
|
@ -666,7 +670,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(
|
|||
}
|
||||
case OMPD_declare_reduction:
|
||||
ConsumeToken();
|
||||
if (auto Res = ParseOpenMPDeclareReductionDirective(AS)) {
|
||||
if (DeclGroupPtrTy Res = ParseOpenMPDeclareReductionDirective(AS)) {
|
||||
// The last seen token is annot_pragma_openmp_end - need to check for
|
||||
// extra tokens.
|
||||
if (Tok.isNot(tok::annot_pragma_openmp_end)) {
|
||||
|
@ -695,9 +699,9 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(
|
|||
ConsumeAnyToken();
|
||||
|
||||
DeclGroupPtrTy Ptr;
|
||||
if (Tok.is(tok::annot_pragma_openmp))
|
||||
if (Tok.is(tok::annot_pragma_openmp)) {
|
||||
Ptr = ParseOpenMPDeclarativeDirectiveWithExtDecl(AS, Attrs, TagType, Tag);
|
||||
else if (Tok.isNot(tok::r_brace) && !isEofOrEom()) {
|
||||
} else if (Tok.isNot(tok::r_brace) && !isEofOrEom()) {
|
||||
// Here we expect to see some function declaration.
|
||||
if (AS == AS_none) {
|
||||
assert(TagType == DeclSpec::TST_unspecified);
|
||||
|
@ -735,8 +739,8 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(
|
|||
}
|
||||
ConsumeToken();
|
||||
}
|
||||
auto Callback = [this, MT, &SameDirectiveDecls](
|
||||
CXXScopeSpec &SS, DeclarationNameInfo NameInfo) {
|
||||
auto &&Callback = [this, MT, &SameDirectiveDecls](
|
||||
CXXScopeSpec &SS, DeclarationNameInfo NameInfo) {
|
||||
Actions.ActOnOpenMPDeclareTargetName(getCurScope(), SS, NameInfo, MT,
|
||||
SameDirectiveDecls);
|
||||
};
|
||||
|
@ -750,10 +754,8 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(
|
|||
}
|
||||
SkipUntil(tok::annot_pragma_openmp_end, StopBeforeMatch);
|
||||
ConsumeAnyToken();
|
||||
SmallVector<Decl *, 4> Decls;
|
||||
Decls.reserve(SameDirectiveDecls.size());
|
||||
for (Decl *D : SameDirectiveDecls)
|
||||
Decls.emplace_back(D);
|
||||
SmallVector<Decl *, 4> Decls(SameDirectiveDecls.begin(),
|
||||
SameDirectiveDecls.end());
|
||||
if (Decls.empty())
|
||||
return DeclGroupPtrTy();
|
||||
return Actions.BuildDeclaratorGroup(Decls);
|
||||
|
@ -766,7 +768,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(
|
|||
return DeclGroupPtrTy();
|
||||
|
||||
llvm::SmallVector<Decl *, 4> Decls;
|
||||
DKind = ParseOpenMPDirectiveKind(*this);
|
||||
DKind = parseOpenMPDirectiveKind(*this);
|
||||
while (DKind != OMPD_end_declare_target && DKind != OMPD_declare_target &&
|
||||
Tok.isNot(tok::eof) && Tok.isNot(tok::r_brace)) {
|
||||
DeclGroupPtrTy Ptr;
|
||||
|
@ -787,7 +789,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(
|
|||
if (Tok.isAnnotation() && Tok.is(tok::annot_pragma_openmp)) {
|
||||
TentativeParsingAction TPA(*this);
|
||||
ConsumeAnnotationToken();
|
||||
DKind = ParseOpenMPDirectiveKind(*this);
|
||||
DKind = parseOpenMPDirectiveKind(*this);
|
||||
if (DKind != OMPD_end_declare_target)
|
||||
TPA.Revert();
|
||||
else
|
||||
|
@ -915,7 +917,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(
|
|||
unsigned ScopeFlags = Scope::FnScope | Scope::DeclScope |
|
||||
Scope::CompoundStmtScope | Scope::OpenMPDirectiveScope;
|
||||
SourceLocation Loc = ConsumeAnnotationToken(), EndLoc;
|
||||
auto DKind = ParseOpenMPDirectiveKind(*this);
|
||||
OpenMPDirectiveKind DKind = parseOpenMPDirectiveKind(*this);
|
||||
OpenMPDirectiveKind CancelRegion = OMPD_unknown;
|
||||
// Name of critical directive.
|
||||
DeclarationNameInfo DirName;
|
||||
|
@ -948,7 +950,8 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(
|
|||
}
|
||||
case OMPD_declare_reduction:
|
||||
ConsumeToken();
|
||||
if (auto Res = ParseOpenMPDeclareReductionDirective(/*AS=*/AS_none)) {
|
||||
if (DeclGroupPtrTy Res =
|
||||
ParseOpenMPDeclareReductionDirective(/*AS=*/AS_none)) {
|
||||
// The last seen token is annot_pragma_openmp_end - need to check for
|
||||
// extra tokens.
|
||||
if (Tok.isNot(tok::annot_pragma_openmp_end)) {
|
||||
|
@ -959,8 +962,9 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(
|
|||
}
|
||||
ConsumeAnyToken();
|
||||
Directive = Actions.ActOnDeclStmt(Res, Loc, Tok.getLocation());
|
||||
} else
|
||||
} else {
|
||||
SkipUntil(tok::annot_pragma_openmp_end);
|
||||
}
|
||||
break;
|
||||
case OMPD_flush:
|
||||
if (PP.LookAhead(0).is(tok::l_paren)) {
|
||||
|
@ -1039,7 +1043,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(
|
|||
T.consumeClose();
|
||||
}
|
||||
} else if (DKind == OMPD_cancellation_point || DKind == OMPD_cancel) {
|
||||
CancelRegion = ParseOpenMPDirectiveKind(*this);
|
||||
CancelRegion = parseOpenMPDirectiveKind(*this);
|
||||
if (Tok.isNot(tok::annot_pragma_openmp_end))
|
||||
ConsumeToken();
|
||||
}
|
||||
|
@ -1531,7 +1535,7 @@ OMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPClauseKind Kind,
|
|||
Arg[Modifier1] = OMPC_SCHEDULE_MODIFIER_unknown;
|
||||
Arg[Modifier2] = OMPC_SCHEDULE_MODIFIER_unknown;
|
||||
Arg[ScheduleKind] = OMPC_SCHEDULE_unknown;
|
||||
auto KindModifier = getOpenMPSimpleClauseType(
|
||||
unsigned KindModifier = getOpenMPSimpleClauseType(
|
||||
Kind, Tok.isAnnotation() ? "" : PP.getSpelling(Tok));
|
||||
if (KindModifier > OMPC_SCHEDULE_unknown) {
|
||||
// Parse 'modifier'
|
||||
|
@ -1604,7 +1608,7 @@ OMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPClauseKind Kind,
|
|||
assert(Kind == OMPC_if);
|
||||
KLoc.push_back(Tok.getLocation());
|
||||
TentativeParsingAction TPA(*this);
|
||||
Arg.push_back(ParseOpenMPDirectiveKind(*this));
|
||||
Arg.push_back(parseOpenMPDirectiveKind(*this));
|
||||
if (Arg.back() != OMPD_unknown) {
|
||||
ConsumeToken();
|
||||
if (Tok.is(tok::colon) && getLangOpts().OpenMP > 40) {
|
||||
|
@ -1614,8 +1618,9 @@ OMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPClauseKind Kind,
|
|||
TPA.Revert();
|
||||
Arg.back() = OMPD_unknown;
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
TPA.Revert();
|
||||
}
|
||||
}
|
||||
|
||||
bool NeedAnExpression = (Kind == OMPC_schedule && DelimLoc.isValid()) ||
|
||||
|
@ -1747,9 +1752,9 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind,
|
|||
return false;
|
||||
}
|
||||
}
|
||||
if (Tok.is(tok::colon))
|
||||
if (Tok.is(tok::colon)) {
|
||||
Data.ColonLoc = ConsumeToken();
|
||||
else {
|
||||
} else {
|
||||
Diag(Tok, DKind == OMPD_ordered ? diag::warn_pragma_expected_colon_r_paren
|
||||
: diag::warn_pragma_expected_colon)
|
||||
<< "dependency type";
|
||||
|
@ -1798,8 +1803,9 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind,
|
|||
if (Data.MapTypeModifier != OMPC_MAP_always) {
|
||||
Diag(Tok, diag::err_omp_unknown_map_type_modifier);
|
||||
Data.MapTypeModifier = OMPC_MAP_unknown;
|
||||
} else
|
||||
} else {
|
||||
MapTypeModifierSpecified = true;
|
||||
}
|
||||
|
||||
ConsumeToken();
|
||||
ConsumeToken();
|
||||
|
@ -1823,8 +1829,9 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind,
|
|||
if (Data.MapTypeModifier != OMPC_MAP_always) {
|
||||
Diag(Tok, diag::err_omp_unknown_map_type_modifier);
|
||||
Data.MapTypeModifier = OMPC_MAP_unknown;
|
||||
} else
|
||||
} else {
|
||||
MapTypeModifierSpecified = true;
|
||||
}
|
||||
|
||||
ConsumeToken();
|
||||
|
||||
|
@ -1871,9 +1878,9 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind,
|
|||
// Parse variable
|
||||
ExprResult VarExpr =
|
||||
Actions.CorrectDelayedTyposInExpr(ParseAssignmentExpression());
|
||||
if (VarExpr.isUsable())
|
||||
if (VarExpr.isUsable()) {
|
||||
Vars.push_back(VarExpr.get());
|
||||
else {
|
||||
} else {
|
||||
SkipUntil(tok::comma, tok::r_paren, tok::annot_pragma_openmp_end,
|
||||
StopBeforeMatch);
|
||||
}
|
||||
|
@ -1910,12 +1917,10 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind,
|
|||
|
||||
// Parse ')'.
|
||||
T.consumeClose();
|
||||
if ((Kind == OMPC_depend && Data.DepKind != OMPC_DEPEND_unknown &&
|
||||
Vars.empty()) ||
|
||||
(Kind != OMPC_depend && Kind != OMPC_map && Vars.empty()) ||
|
||||
(MustHaveTail && !Data.TailExpr) || InvalidReductionId)
|
||||
return true;
|
||||
return false;
|
||||
return (Kind == OMPC_depend && Data.DepKind != OMPC_DEPEND_unknown &&
|
||||
Vars.empty()) ||
|
||||
(Kind != OMPC_depend && Kind != OMPC_map && Vars.empty()) ||
|
||||
(MustHaveTail && !Data.TailExpr) || InvalidReductionId;
|
||||
}
|
||||
|
||||
/// \brief Parsing of OpenMP clause 'private', 'firstprivate', 'lastprivate',
|
||||
|
|
Loading…
Reference in New Issue