Author: Timm Bäder
Date: 2024-06-12T09:53:33+02:00
New Revision: 8ad82b419b88102746735505effe5bc09f26ae54

URL: 
https://github.com/llvm/llvm-project/commit/8ad82b419b88102746735505effe5bc09f26ae54
DIFF: 
https://github.com/llvm/llvm-project/commit/8ad82b419b88102746735505effe5bc09f26ae54.diff

LOG: [clang][Interp] Fix re-visiting OpenCL variables of in constant AS

We need to use isConstant() here, isConstQualified() is not enough.

Added: 
    

Modified: 
    clang/lib/AST/Interp/ByteCodeExprGen.cpp
    clang/test/AST/Interp/opencl.cl

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp 
b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index e766558ab3083..602d105715d2b 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -3964,7 +3964,7 @@ bool ByteCodeExprGen<Emitter>::visitDeclRef(const 
ValueDecl *D, const Expr *E) {
     if (const auto *VD = dyn_cast<VarDecl>(D)) {
       // Visit local const variables like normal.
       if ((VD->isLocalVarDecl() || VD->isStaticDataMember()) &&
-          VD->getType().isConstQualified()) {
+          VD->getType().isConstant(Ctx.getASTContext())) {
         if (!this->visitVarDecl(VD))
           return false;
         // Retry.
@@ -3973,8 +3973,8 @@ bool ByteCodeExprGen<Emitter>::visitDeclRef(const 
ValueDecl *D, const Expr *E) {
     }
   } else {
     if (const auto *VD = dyn_cast<VarDecl>(D);
-        VD && VD->getAnyInitializer() && VD->getType().isConstQualified() &&
-        !VD->isWeak()) {
+        VD && VD->getAnyInitializer() &&
+        VD->getType().isConstant(Ctx.getASTContext()) && !VD->isWeak()) {
       if (!this->visitVarDecl(VD))
         return false;
       // Retry.

diff  --git a/clang/test/AST/Interp/opencl.cl b/clang/test/AST/Interp/opencl.cl
index fd7756fff7c11..32cc000cefd30 100644
--- a/clang/test/AST/Interp/opencl.cl
+++ b/clang/test/AST/Interp/opencl.cl
@@ -36,3 +36,10 @@ void negativeShift32(int a,int b) {
 
 int2 A = {1,2};
 int4 B = {(int2)(1,2), (int2)(3,4)};
+
+
+constant int sz0 = 5;
+kernel void testvla()
+{
+  int vla0[sz0];
+}


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

Reply via email to