Author: erichkeane
Date: 2025-05-05T10:35:49-07:00
New Revision: 91867337ada52fb113d3d4808b5acb5790b869ff

URL: 
https://github.com/llvm/llvm-project/commit/91867337ada52fb113d3d4808b5acb5790b869ff
DIFF: 
https://github.com/llvm/llvm-project/commit/91867337ada52fb113d3d4808b5acb5790b869ff.diff

LOG: [OpenACC] Fix infinite loop bug with the device_type checking

I noticed while writing a test that we ended up infinite looping thanks
to an early exit not correctly setting the next step of the loop.

Added: 
    

Modified: 
    clang/lib/Sema/SemaOpenACCClause.cpp
    clang/test/SemaOpenACC/loop-construct-collapse-clause.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaOpenACCClause.cpp 
b/clang/lib/Sema/SemaOpenACCClause.cpp
index 5a335352e6704..6187e0e719bb1 100644
--- a/clang/lib/Sema/SemaOpenACCClause.cpp
+++ b/clang/lib/Sema/SemaOpenACCClause.cpp
@@ -403,8 +403,10 @@ class SemaOpenACCClauseVisitor {
 
       // There are no clauses of the current kind between these device_types, 
so
       // continue.
-      if (CurClauseKindItr == CurDevTypeItr)
+      if (CurClauseKindItr == CurDevTypeItr) {
+        PrevDeviceTypeItr = CurDevTypeItr;
         continue;
+      }
 
       // At this point, we know that this device_type region has a collapse.  
So
       // diagnose if the two device_types have any overlap in their

diff  --git a/clang/test/SemaOpenACC/loop-construct-collapse-clause.cpp 
b/clang/test/SemaOpenACC/loop-construct-collapse-clause.cpp
index 784e657cccb53..9a5f6347dec9f 100644
--- a/clang/test/SemaOpenACC/loop-construct-collapse-clause.cpp
+++ b/clang/test/SemaOpenACC/loop-construct-collapse-clause.cpp
@@ -572,4 +572,9 @@ void no_dupes_since_last_device_type() {
 #pragma acc loop device_type(radeon) collapse(1) device_type(nvidia, radeon) 
collapse(2)
   for(unsigned i = 0; i < 5; ++i)
     for(unsigned j = 0; j < 5; ++j);
+
+  int NotConstexpr;
+  // expected-error@+1 3{{OpenACC 'collapse' clause loop count must be a 
constant expression}}
+#pragma acc loop collapse(NotConstexpr) device_type(radeon, nvidia) 
collapse(NotConstexpr) device_type(host) collapse(NotConstexpr)
+  for(unsigned j = 0; j < 5; ++j);
 }


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to