/// \brief OpenMP directives.
enum OpenMPDirectiveKind {
- OMPD_unknown = 0,
#define OPENMP_DIRECTIVE(Name) \
OMPD_##Name,
#include "clang/Basic/OpenMPKinds.def"
- NUM_OPENMP_DIRECTIVES
+ OMPD_unknown
};
/// \brief OpenMP clauses.
enum OpenMPClauseKind {
- OMPC_unknown = 0,
#define OPENMP_CLAUSE(Name, Class) \
OMPC_##Name,
#include "clang/Basic/OpenMPKinds.def"
OMPC_threadprivate,
- NUM_OPENMP_CLAUSES
+ OMPC_unknown
};
/// \brief OpenMP attributes for 'default' clause.
enum OpenMPDefaultClauseKind {
- OMPC_DEFAULT_unknown = 0,
#define OPENMP_DEFAULT_KIND(Name) \
OMPC_DEFAULT_##Name,
#include "clang/Basic/OpenMPKinds.def"
- NUM_OPENMP_DEFAULT_KINDS
+ OMPC_DEFAULT_unknown
};
/// \brief OpenMP attributes for 'proc_bind' clause.
}
const char *clang::getOpenMPDirectiveName(OpenMPDirectiveKind Kind) {
- assert(Kind < NUM_OPENMP_DIRECTIVES);
+ assert(Kind <= OMPD_unknown);
switch (Kind) {
case OMPD_unknown:
return "unknown";
#define OPENMP_DIRECTIVE(Name) \
case OMPD_##Name : return #Name;
#include "clang/Basic/OpenMPKinds.def"
- case NUM_OPENMP_DIRECTIVES:
break;
}
llvm_unreachable("Invalid OpenMP directive kind");
}
const char *clang::getOpenMPClauseName(OpenMPClauseKind Kind) {
- assert(Kind < NUM_OPENMP_CLAUSES);
+ assert(Kind <= OMPC_unknown);
switch (Kind) {
case OMPC_unknown:
return "unknown";
#include "clang/Basic/OpenMPKinds.def"
case OMPC_threadprivate:
return "threadprivate or thread local";
- case NUM_OPENMP_CLAUSES:
- break;
}
llvm_unreachable("Invalid OpenMP clause kind");
}
case OMPC_shared:
case OMPC_linear:
case OMPC_copyin:
- case NUM_OPENMP_CLAUSES:
break;
}
llvm_unreachable("Invalid OpenMP simple clause kind");
case OMPC_shared:
case OMPC_linear:
case OMPC_copyin:
- case NUM_OPENMP_CLAUSES:
break;
}
llvm_unreachable("Invalid OpenMP simple clause kind");
bool clang::isAllowedClauseForDirective(OpenMPDirectiveKind DKind,
OpenMPClauseKind CKind) {
- assert(DKind < NUM_OPENMP_DIRECTIVES);
- assert(CKind < NUM_OPENMP_CLAUSES);
+ assert(DKind <= OMPD_unknown);
+ assert(CKind <= OMPC_unknown);
switch (DKind) {
case OMPD_parallel:
switch (CKind) {
case OMPD_unknown:
case OMPD_threadprivate:
case OMPD_task:
- case NUM_OPENMP_DIRECTIVES:
break;
}
return false;
case OMPD_parallel:
case OMPD_simd:
case OMPD_task:
- case NUM_OPENMP_DIRECTIVES:
Diag(Tok, diag::err_omp_unexpected_directive)
<< getOpenMPDirectiveName(DKind);
break;
ParenBraceBracketBalancer BalancerRAIIObj(*this);
SmallVector<Expr *, 5> Identifiers;
SmallVector<OMPClause *, 5> Clauses;
- SmallVector<llvm::PointerIntPair<OMPClause *, 1, bool>, NUM_OPENMP_CLAUSES>
- FirstClauses(NUM_OPENMP_CLAUSES);
+ SmallVector<llvm::PointerIntPair<OMPClause *, 1, bool>, OMPC_unknown + 1>
+ FirstClauses(OMPC_unknown + 1);
const unsigned ScopeFlags = Scope::FnScope | Scope::DeclScope |
Scope::OpenMPDirectiveScope;
SourceLocation Loc = ConsumeToken(), EndLoc;
SkipUntil(tok::annot_pragma_openmp_end);
break;
case OMPD_task:
- case NUM_OPENMP_DIRECTIVES:
Diag(Tok, diag::err_omp_unexpected_directive)
<< getOpenMPDirectiveName(DKind);
SkipUntil(tok::annot_pragma_openmp_end);
SkipUntil(tok::annot_pragma_openmp_end, StopBeforeMatch);
break;
case OMPC_threadprivate:
- case NUM_OPENMP_CLAUSES:
Diag(Tok, diag::err_omp_unexpected_clause)
<< getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind);
SkipUntil(tok::comma, tok::annot_pragma_openmp_end, StopBeforeMatch);
case OMPD_task:
llvm_unreachable("OpenMP Directive is not allowed");
case OMPD_unknown:
- case NUM_OPENMP_DIRECTIVES:
llvm_unreachable("Unknown OpenMP directive");
}
}
case OMPD_task:
llvm_unreachable("OpenMP Directive is not allowed");
case OMPD_unknown:
- case NUM_OPENMP_DIRECTIVES:
llvm_unreachable("Unknown OpenMP directive");
}
case OMPC_copyin:
case OMPC_threadprivate:
case OMPC_unknown:
- case NUM_OPENMP_CLAUSES:
llvm_unreachable("Clause is not allowed.");
}
return Res;
<< ConvTy->isEnumeralType() << ConvTy;
}
SemaDiagnosticBuilder diagnoseConversion(
- Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override {
+ Sema &, SourceLocation, QualType, QualType) override {
llvm_unreachable("conversion functions are permitted");
}
} ConvertDiagnoser;
case OMPC_copyin:
case OMPC_threadprivate:
case OMPC_unknown:
- case NUM_OPENMP_CLAUSES:
llvm_unreachable("Clause is not allowed.");
}
return Res;
SourceLocation EndLoc) {
if (Kind == OMPC_DEFAULT_unknown) {
std::string Values;
- static_assert(NUM_OPENMP_DEFAULT_KINDS > 1,
- "NUM_OPENMP_DEFAULT_KINDS not greater than 1");
+ static_assert(OMPC_DEFAULT_unknown > 0,
+ "OMPC_DEFAULT_unknown not greater than 0");
std::string Sep(", ");
- for (unsigned i = OMPC_DEFAULT_unknown + 1;
- i < NUM_OPENMP_DEFAULT_KINDS; ++i) {
+ for (unsigned i = 0; i < OMPC_DEFAULT_unknown; ++i) {
Values += "'";
Values += getOpenMPSimpleClauseTypeName(OMPC_default, i);
Values += "'";
switch (i) {
- case NUM_OPENMP_DEFAULT_KINDS - 2:
+ case OMPC_DEFAULT_unknown - 2:
Values += " or ";
break;
- case NUM_OPENMP_DEFAULT_KINDS - 1:
+ case OMPC_DEFAULT_unknown - 1:
break;
default:
Values += Sep;
DSAStack->setDefaultDSAShared();
break;
case OMPC_DEFAULT_unknown:
- case NUM_OPENMP_DEFAULT_KINDS:
llvm_unreachable("Clause kind is not allowed.");
break;
}
case OMPC_proc_bind:
case OMPC_threadprivate:
case OMPC_unknown:
- case NUM_OPENMP_CLAUSES:
llvm_unreachable("Clause is not allowed.");
}
return Res;