diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -2527,6 +2527,7 @@ void Sema::EndOpenMPClause() { DSAStack->setClauseParsingMode(/*K=*/OMPC_unknown); + CleanupVarDeclMarking(); } static std::pair diff --git a/clang/test/OpenMP/constexpr_capture.cpp b/clang/test/OpenMP/constexpr_capture.cpp --- a/clang/test/OpenMP/constexpr_capture.cpp +++ b/clang/test/OpenMP/constexpr_capture.cpp @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-linux -S -emit-llvm %s -o - -std=c++11 2>&1 | FileCheck %s +// RUN: %clang_cc1 -verify -fopenmp -x c++ -fopenmp-targets=x86_64-pc-linux-gnu -triple powerpc64le-unknown-linux -S -emit-llvm %s -o - -std=c++11 2>&1 | FileCheck %s // expected-no-diagnostics template struct integral_constant { @@ -12,10 +13,24 @@ struct V { template ::type> V(); }; + +constexpr double h_chebyshev_coefs[] = { + 1.0000020784639703, 0.0021491446496202074}; + +void test(double *d_value) +{ +#pragma omp target map(tofrom \ + : d_value [0:1]) map(always, to \ + : h_chebyshev_coefs [0:2]) + *d_value = h_chebyshev_coefs[1]; return; +} + +// CHECK: void @__omp_offloading_{{.+}}test{{.+}}(double* %0) + int main() { #pragma omp target V v; return 0; } -// CHECK: call void @__omp_offloading_{{.+}}_main_l16() +// CHECK: call void @__omp_offloading_{{.+}}_main_{{.+}}()