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

Reply via email to