Author: Timm Baeder
Date: 2026-06-11T07:53:17+02:00
New Revision: 8d8a19649168b9fd6e8ec4b6eaee47506c5ec38f

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

LOG: [clang][bytecode] Check CarrayOutPtr in subcl more thorougly (#203172)

Use the local `isReadable` check.

Added: 
    

Modified: 
    clang/lib/AST/ByteCode/InterpBuiltin.cpp
    clang/test/AST/ByteCode/builtins.c

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp 
b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index 08fc8252d0708..4326142aba81f 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -984,7 +984,7 @@ static bool interp__builtin_carryop(InterpState &S, CodePtr 
OpPC,
   if (!popToAPSInt(S.Stk, LHST, LHS))
     return false;
 
-  if (CarryOutPtr.isDummy() || !CarryOutPtr.isBlockPointer())
+  if (!isReadable(CarryOutPtr))
     return false;
 
   APSInt CarryOut;

diff  --git a/clang/test/AST/ByteCode/builtins.c 
b/clang/test/AST/ByteCode/builtins.c
index dc19d197d0a2e..8af1c5cc90616 100644
--- a/clang/test/AST/ByteCode/builtins.c
+++ b/clang/test/AST/ByteCode/builtins.c
@@ -37,3 +37,7 @@ const int compared = strcmp(_str, (const char *)_str2); // 
both-error {{initiali
 
 int ptrint = __builtin_bswap64("") == 0x1234 ? 1 : 0; // both-error 
{{incompatible pointer to integer conversion}} \
                                                       // both-error 
{{initializer element is not a compile-time constant}}
+
+void subclNonReadable() {
+  if(__builtin_subcl(0, 0, 0, &(*({ struct {} x; &x; }))) != 0) {} // 
both-error {{incompatible pointer types}}
+}


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to