ABataev created this revision. ABataev added reviewers: jdoerfert, mikerice. Herald added subscribers: guansong, yaxunl. ABataev requested review of this revision. Herald added a subscriber: sstefan1. Herald added a project: clang.
The emty declare target/end declare target region should not cause an error emission. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D99288 Files: clang/lib/Parse/ParseOpenMP.cpp clang/test/OpenMP/declare_target_ast_print.cpp Index: clang/test/OpenMP/declare_target_ast_print.cpp =================================================================== --- clang/test/OpenMP/declare_target_ast_print.cpp +++ clang/test/OpenMP/declare_target_ast_print.cpp @@ -277,4 +277,8 @@ // CHECK-NEXT: int ts = 1; // CHECK-NEXT: #pragma omp end declare target +// Do not expect anything here since the region is empty. +#pragma omp declare target +#pragma omp end declare target + #endif Index: clang/lib/Parse/ParseOpenMP.cpp =================================================================== --- clang/lib/Parse/ParseOpenMP.cpp +++ clang/lib/Parse/ParseOpenMP.cpp @@ -2115,9 +2115,18 @@ ParsingOpenMPDirectiveRAII NormalScope(*this, /*Value=*/false); llvm::SmallVector<Decl *, 4> Decls; - DKind = parseOpenMPDirectiveKind(*this); - while (DKind != OMPD_end_declare_target && Tok.isNot(tok::eof) && - Tok.isNot(tok::r_brace)) { + while (Tok.isNot(tok::eof) && Tok.isNot(tok::r_brace)) { + if (Tok.isAnnotation() && Tok.is(tok::annot_pragma_openmp)) { + TentativeParsingAction TPA(*this); + ConsumeAnnotationToken(); + DKind = parseOpenMPDirectiveKind(*this); + if (DKind != OMPD_end_declare_target) + TPA.Revert(); + else + TPA.Commit(); + } + if (DKind == OMPD_end_declare_target) + break; DeclGroupPtrTy Ptr; // Here we expect to see some function declaration. if (AS == AS_none) { @@ -2133,15 +2142,6 @@ DeclGroupRef Ref = Ptr.get(); Decls.append(Ref.begin(), Ref.end()); } - if (Tok.isAnnotation() && Tok.is(tok::annot_pragma_openmp)) { - TentativeParsingAction TPA(*this); - ConsumeAnnotationToken(); - DKind = parseOpenMPDirectiveKind(*this); - if (DKind != OMPD_end_declare_target) - TPA.Revert(); - else - TPA.Commit(); - } } ParseOMPEndDeclareTargetDirective(DKind, DTLoc);
Index: clang/test/OpenMP/declare_target_ast_print.cpp =================================================================== --- clang/test/OpenMP/declare_target_ast_print.cpp +++ clang/test/OpenMP/declare_target_ast_print.cpp @@ -277,4 +277,8 @@ // CHECK-NEXT: int ts = 1; // CHECK-NEXT: #pragma omp end declare target +// Do not expect anything here since the region is empty. +#pragma omp declare target +#pragma omp end declare target + #endif Index: clang/lib/Parse/ParseOpenMP.cpp =================================================================== --- clang/lib/Parse/ParseOpenMP.cpp +++ clang/lib/Parse/ParseOpenMP.cpp @@ -2115,9 +2115,18 @@ ParsingOpenMPDirectiveRAII NormalScope(*this, /*Value=*/false); llvm::SmallVector<Decl *, 4> Decls; - DKind = parseOpenMPDirectiveKind(*this); - while (DKind != OMPD_end_declare_target && Tok.isNot(tok::eof) && - Tok.isNot(tok::r_brace)) { + while (Tok.isNot(tok::eof) && Tok.isNot(tok::r_brace)) { + if (Tok.isAnnotation() && Tok.is(tok::annot_pragma_openmp)) { + TentativeParsingAction TPA(*this); + ConsumeAnnotationToken(); + DKind = parseOpenMPDirectiveKind(*this); + if (DKind != OMPD_end_declare_target) + TPA.Revert(); + else + TPA.Commit(); + } + if (DKind == OMPD_end_declare_target) + break; DeclGroupPtrTy Ptr; // Here we expect to see some function declaration. if (AS == AS_none) { @@ -2133,15 +2142,6 @@ DeclGroupRef Ref = Ptr.get(); Decls.append(Ref.begin(), Ref.end()); } - if (Tok.isAnnotation() && Tok.is(tok::annot_pragma_openmp)) { - TentativeParsingAction TPA(*this); - ConsumeAnnotationToken(); - DKind = parseOpenMPDirectiveKind(*this); - if (DKind != OMPD_end_declare_target) - TPA.Revert(); - else - TPA.Commit(); - } } ParseOMPEndDeclareTargetDirective(DKind, DTLoc);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits