diff options
Diffstat (limited to 'clang/lib/Parse/ParseOpenMP.cpp')
-rw-r--r-- | clang/lib/Parse/ParseOpenMP.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index 4baf5d26616..94d90c0e210 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -38,6 +38,8 @@ static OpenMPDirectiveKind ParseOpenMPDirectiveKind(Parser &P) { OMPD_unknown /*target enter/exit*/}, {OMPD_unknown /*target enter*/, OMPD_unknown /*data*/, OMPD_target_enter_data}, + {OMPD_unknown /*target exit*/, OMPD_unknown /*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}, @@ -55,7 +57,9 @@ static OpenMPDirectiveKind ParseOpenMPDirectiveKind(Parser &P) { TokenMatched = ((i == 0) && !P.getPreprocessor().getSpelling(Tok).compare("cancellation")) || - ((i == 3) && !P.getPreprocessor().getSpelling(Tok).compare("enter")); + ((i == 3) && + !P.getPreprocessor().getSpelling(Tok).compare("enter")) || + ((i == 4) && !P.getPreprocessor().getSpelling(Tok).compare("exit")); } else { TokenMatched = DKind == F[i][0] && DKind != OMPD_unknown; } @@ -72,10 +76,11 @@ static OpenMPDirectiveKind ParseOpenMPDirectiveKind(Parser &P) { TokenMatched = ((i == 0) && !P.getPreprocessor().getSpelling(Tok).compare("point")) || - ((i == 1 || i == 3) && + ((i == 1 || i == 3 || i == 4) && !P.getPreprocessor().getSpelling(Tok).compare("data")) || ((i == 2) && - !P.getPreprocessor().getSpelling(Tok).compare("enter")); + (!P.getPreprocessor().getSpelling(Tok).compare("enter") || + !P.getPreprocessor().getSpelling(Tok).compare("exit"))); } else { TokenMatched = SDKind == F[i][1] && SDKind != OMPD_unknown; } @@ -147,6 +152,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirective() { case OMPD_cancel: case OMPD_target_data: case OMPD_target_enter_data: + case OMPD_target_exit_data: case OMPD_taskloop: case OMPD_taskloop_simd: case OMPD_distribute: @@ -171,7 +177,8 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirective() { /// 'barrier' | 'taskwait' | 'flush' | 'ordered' | 'atomic' | /// 'for simd' | 'parallel for simd' | 'target' | 'target data' | /// 'taskgroup' | 'teams' | 'taskloop' | 'taskloop simd' {clause} | -/// 'distribute' | 'target enter data' | annot_pragma_openmp_end +/// 'distribute' | 'target enter data' | 'target exit data' +/// annot_pragma_openmp_end /// StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( AllowedContsructsKind Allowed) { @@ -226,6 +233,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( case OMPD_cancellation_point: case OMPD_cancel: case OMPD_target_enter_data: + case OMPD_target_exit_data: if (Allowed == ACK_StatementsOpenMPNonStandalone) { Diag(Tok, diag::err_omp_immediate_directive) << getOpenMPDirectiveName(DKind) << 0; |