diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index aa6a0c61a2c17..5db2f2e2ccf86 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -2704,7 +2704,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( // If no match is found and no otherwise clause is present, skip // OMP5.2 Chapter 7.4: If no otherwise clause is specified the effect is as // if one was specified without an associated directive variant. - if (BestIdx == -1 && Idx == 1) { + if (BestIdx == -1 && Idx > 0) { assert(Tok.is(tok::annot_pragma_openmp_end) && "Expecting the end of the pragma here"); ConsumeAnnotationToken(); diff --git a/clang/test/OpenMP/metadirective_messages.cpp b/clang/test/OpenMP/metadirective_messages.cpp index 9d2934f8b1e10..7426f915bf99e 100644 --- a/clang/test/OpenMP/metadirective_messages.cpp +++ b/clang/test/OpenMP/metadirective_messages.cpp @@ -47,6 +47,10 @@ void foo() { ; #pragma omp metadirective when(device = {arch(nvptx)} : parallel) xyz() //expected-error {{expected at least one clause on '#pragma omp metadirective' directive}} ; + int a = 0; + int b = 1; + #pragma omp metadirective when(user={condition(a)}: parallel for simd) when(user={condition(b)}: target teams distribute parallel for simd) + for (int i = 0; i < 10; ++i) {} #endif }