aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/AST/ByteCode
diff options
context:
space:
mode:
authorTimm Baeder <tbaeder@redhat.com>2025-08-08 16:03:02 +0200
committerGitHub <noreply@github.com>2025-08-08 16:03:02 +0200
commit1b1f352cb97d9d9f346bd68291e968ef76e36776 (patch)
treea806a26099ad42ef01316d4cb0ae0069595d59c7 /clang/lib/AST/ByteCode
parent3ea76af3a15af7650b3a900f7418809f452b10f7 (diff)
downloadllvm-1b1f352cb97d9d9f346bd68291e968ef76e36776.zip
llvm-1b1f352cb97d9d9f346bd68291e968ef76e36776.tar.gz
llvm-1b1f352cb97d9d9f346bd68291e968ef76e36776.tar.bz2
[clang][bytecode] Handle reads on zero-size arrays (#152706)
Diffstat (limited to 'clang/lib/AST/ByteCode')
-rw-r--r--clang/lib/AST/ByteCode/Interp.cpp4
1 files changed, 1 insertions, 3 deletions
diff --git a/clang/lib/AST/ByteCode/Interp.cpp b/clang/lib/AST/ByteCode/Interp.cpp
index bc14bd3d..b5c044c 100644
--- a/clang/lib/AST/ByteCode/Interp.cpp
+++ b/clang/lib/AST/ByteCode/Interp.cpp
@@ -518,7 +518,7 @@ bool CheckNull(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
bool CheckRange(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
AccessKinds AK) {
- if (!Ptr.isOnePastEnd())
+ if (!Ptr.isOnePastEnd() && !Ptr.isZeroSizeArray())
return true;
if (S.getLangOpts().CPlusPlus) {
const SourceInfo &Loc = S.Current->getSource(OpPC);
@@ -829,8 +829,6 @@ bool CheckFinalLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {
return false;
if (!CheckExtern(S, OpPC, Ptr))
return false;
- if (!CheckRange(S, OpPC, Ptr, AK_Read))
- return false;
if (!CheckActive(S, OpPC, Ptr, AK_Read))
return false;
if (!CheckLifetime(S, OpPC, Ptr.getLifetime(), AK_Read))