diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 7f75cfc5b54f3..f4364a259ad57 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -4962,7 +4962,8 @@ StmtResult Sema::ActOnOpenMPRegionEnd(StmtResult S, if (RC->getModifier() != OMPC_REDUCTION_inscan) continue; for (Expr *E : RC->copy_array_temps()) - MarkDeclarationsReferencedInExpr(E); + if (E) + MarkDeclarationsReferencedInExpr(E); } if (auto *AC = dyn_cast(C)) { for (Expr *E : AC->varlists()) diff --git a/clang/test/OpenMP/scan_ast_print.cpp b/clang/test/OpenMP/scan_ast_print.cpp index 3bbd3b60c3e8c..82cb13eb6e70f 100644 --- a/clang/test/OpenMP/scan_ast_print.cpp +++ b/clang/test/OpenMP/scan_ast_print.cpp @@ -17,6 +17,10 @@ T tmain(T argc) { static T a; #pragma omp for reduction(inscan, +: a) for (int i = 0; i < 10; ++i) { +#pragma omp scan inclusive(a) + } +#pragma omp parallel for reduction(inscan, +:a) + for (int i = 0; i < 10; ++i) { #pragma omp scan inclusive(a) } return a + argc; @@ -25,15 +29,29 @@ T tmain(T argc) { // CHECK-NEXT: #pragma omp for reduction(inscan, +: a) // CHECK-NEXT: for (int i = 0; i < 10; ++i) { // CHECK-NEXT: #pragma omp scan inclusive(a){{$}} + +// CHECK: #pragma omp parallel for reduction(inscan, +: a) +// CHECK-NEXT: for (int i = 0; i < 10; ++i) { +// CHECK-NEXT: #pragma omp scan inclusive(a){{$}} + // CHECK: static int a; // CHECK-NEXT: #pragma omp for reduction(inscan, +: a) // CHECK-NEXT: for (int i = 0; i < 10; ++i) { // CHECK-NEXT: #pragma omp scan inclusive(a) + +// CHECK: #pragma omp parallel for reduction(inscan, +: a) +// CHECK-NEXT: for (int i = 0; i < 10; ++i) { +// CHECK-NEXT: #pragma omp scan inclusive(a) + // CHECK: static char a; // CHECK-NEXT: #pragma omp for reduction(inscan, +: a) // CHECK-NEXT: for (int i = 0; i < 10; ++i) { // CHECK-NEXT: #pragma omp scan inclusive(a) +// CHECK: #pragma omp parallel for reduction(inscan, +: a) +// CHECK-NEXT: for (int i = 0; i < 10; ++i) { +// CHECK-NEXT: #pragma omp scan inclusive(a) + int main(int argc, char **argv) { static int a; // CHECK: static int a;