Author: Shilei Tian Date: 2024-08-12T08:57:37-04:00 New Revision: aa86e5beffec33c84289e2a103c6de0311865be5
URL: https://github.com/llvm/llvm-project/commit/aa86e5beffec33c84289e2a103c6de0311865be5 DIFF: https://github.com/llvm/llvm-project/commit/aa86e5beffec33c84289e2a103c6de0311865be5.diff LOG: [Clang][OpenMP] Fix the wrong transform of `num_teams` claused introduced in #99732 (#102716) Added: Modified: clang/lib/Sema/TreeTransform.h clang/test/OpenMP/target_teams_ast_print.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 78ec964037dfe9..62287c2d26375c 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -11018,11 +11018,16 @@ TreeTransform<Derived>::TransformOMPAllocateClause(OMPAllocateClause *C) { template <typename Derived> OMPClause * TreeTransform<Derived>::TransformOMPNumTeamsClause(OMPNumTeamsClause *C) { - ExprResult E = getDerived().TransformExpr(C->getNumTeams().front()); - if (E.isInvalid()) - return nullptr; + llvm::SmallVector<Expr *, 3> Vars; + Vars.reserve(C->varlist_size()); + for (auto *VE : C->varlist()) { + ExprResult EVar = getDerived().TransformExpr(cast<Expr>(VE)); + if (EVar.isInvalid()) + return nullptr; + Vars.push_back(EVar.get()); + } return getDerived().RebuildOMPNumTeamsClause( - E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> diff --git a/clang/test/OpenMP/target_teams_ast_print.cpp b/clang/test/OpenMP/target_teams_ast_print.cpp index ca5d26822ec96d..8338f2a68f9228 100644 --- a/clang/test/OpenMP/target_teams_ast_print.cpp +++ b/clang/test/OpenMP/target_teams_ast_print.cpp @@ -58,6 +58,8 @@ T tmain(T argc, T *argv) { foo(); #pragma omp target teams allocate(my_allocator:f) reduction(^:e, f) reduction(&& : g) uses_allocators(my_allocator(traits)) foo(); +#pragma omp target teams ompx_bare num_teams(C, C, C) thread_limit(d*C, d*C, d*C) + foo(); return 0; } @@ -97,6 +99,8 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: foo() // CHECK-NEXT: #pragma omp target teams allocate(my_allocator: f) reduction(^: e,f) reduction(&&: g) uses_allocators(my_allocator(traits)) // CHECK-NEXT: foo() +// CHECK-NEXT: #pragma omp target teams ompx_bare num_teams(1,1,1) thread_limit(d * 1,d * 1,d * 1) +// CHECK-NEXT: foo(); enum Enum { }; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits