diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2014-05-06 06:04:14 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2014-05-06 06:04:14 +0000 |
commit | 9292dbd49443621fad5e63ec530bc136561294cd (patch) | |
tree | 6d6665d2533bafcb31fd33826df5cd9cdc6d9f3b /lib/Sema/SemaOpenMP.cpp | |
parent | 2115b66f4114258ad27b1abaef7e16676b119c91 (diff) | |
download | clang-9292dbd49443621fad5e63ec530bc136561294cd.tar.gz clang-9292dbd49443621fad5e63ec530bc136561294cd.tar.bz2 clang-9292dbd49443621fad5e63ec530bc136561294cd.tar.xz |
[OPENMP] 'proc_bind' clause support - Parsing and sema analysis for OpenMP clause 'proc_bind'
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208060 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaOpenMP.cpp')
-rw-r--r-- | lib/Sema/SemaOpenMP.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/Sema/SemaOpenMP.cpp b/lib/Sema/SemaOpenMP.cpp index b41f7e35d1..441fc56a7f 100644 --- a/lib/Sema/SemaOpenMP.cpp +++ b/lib/Sema/SemaOpenMP.cpp @@ -771,6 +771,7 @@ OMPClause *Sema::ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind, Res = ActOnOpenMPSafelenClause(Expr, StartLoc, LParenLoc, EndLoc); break; case OMPC_default: + case OMPC_proc_bind: case OMPC_private: case OMPC_firstprivate: case OMPC_shared: @@ -924,6 +925,11 @@ OMPClause *Sema::ActOnOpenMPSimpleClause(OpenMPClauseKind Kind, ActOnOpenMPDefaultClause(static_cast<OpenMPDefaultClauseKind>(Argument), ArgumentLoc, StartLoc, LParenLoc, EndLoc); break; + case OMPC_proc_bind: + Res = + ActOnOpenMPProcBindClause(static_cast<OpenMPProcBindClauseKind>(Argument), + ArgumentLoc, StartLoc, LParenLoc, EndLoc); + break; case OMPC_if: case OMPC_num_threads: case OMPC_safelen: @@ -986,6 +992,37 @@ OMPClause *Sema::ActOnOpenMPDefaultClause(OpenMPDefaultClauseKind Kind, EndLoc); } +OMPClause *Sema::ActOnOpenMPProcBindClause(OpenMPProcBindClauseKind Kind, + SourceLocation KindKwLoc, + SourceLocation StartLoc, + SourceLocation LParenLoc, + SourceLocation EndLoc) { + if (Kind == OMPC_PROC_BIND_unknown) { + std::string Values; + std::string Sep(", "); + for (unsigned i = 0; i < OMPC_PROC_BIND_unknown; ++i) { + Values += "'"; + Values += getOpenMPSimpleClauseTypeName(OMPC_proc_bind, i); + Values += "'"; + switch (i) { + case OMPC_PROC_BIND_unknown - 2: + Values += " or "; + break; + case OMPC_PROC_BIND_unknown - 1: + break; + default: + Values += Sep; + break; + } + } + Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) + << Values << getOpenMPClauseName(OMPC_proc_bind); + return 0; + } + return new (Context) OMPProcBindClause(Kind, KindKwLoc, StartLoc, LParenLoc, + EndLoc); +} + OMPClause *Sema::ActOnOpenMPVarListClause(OpenMPClauseKind Kind, ArrayRef<Expr *> VarList, Expr *TailExpr, @@ -1015,6 +1052,7 @@ OMPClause *Sema::ActOnOpenMPVarListClause(OpenMPClauseKind Kind, case OMPC_num_threads: case OMPC_safelen: case OMPC_default: + case OMPC_proc_bind: case OMPC_threadprivate: case OMPC_unknown: case NUM_OPENMP_CLAUSES: |