https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/131633
None >From 72ace33d6a7035f193728607095493d1a5d575ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbae...@redhat.com> Date: Mon, 17 Mar 2025 17:01:38 +0100 Subject: [PATCH] [clang][bytecode] Fix builtin_memchr with non-0 start index --- clang/lib/AST/ByteCode/InterpBuiltin.cpp | 8 +++++--- clang/test/AST/ByteCode/builtin-functions.cpp | 5 +++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp index 4660c80fc90db..3fa8fbc22ec03 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp @@ -2045,8 +2045,10 @@ static bool interp__builtin_memchr(InterpState &S, CodePtr OpPC, (ID == Builtin::BIstrchr || ID == Builtin::BI__builtin_strchr); size_t Index = Ptr.getIndex(); + size_t Step = 0; for (;;) { - const Pointer &ElemPtr = Index > 0 ? Ptr.atIndex(Index) : Ptr; + const Pointer &ElemPtr = + (Index + Step) > 0 ? Ptr.atIndex(Index + Step) : Ptr; if (!CheckLoad(S, OpPC, ElemPtr)) return false; @@ -2060,8 +2062,8 @@ static bool interp__builtin_memchr(InterpState &S, CodePtr OpPC, if (StopAtZero && V == 0) break; - ++Index; - if (MaxLength && Index == MaxLength->getZExtValue()) + ++Step; + if (MaxLength && Step == MaxLength->getZExtValue()) break; } diff --git a/clang/test/AST/ByteCode/builtin-functions.cpp b/clang/test/AST/ByteCode/builtin-functions.cpp index 29812553af9f0..11ff48bfa7102 100644 --- a/clang/test/AST/ByteCode/builtin-functions.cpp +++ b/clang/test/AST/ByteCode/builtin-functions.cpp @@ -1459,6 +1459,11 @@ namespace Memchr { constexpr bool b = !memchr("hello", 'h', 3); // both-error {{constant expression}} \ // both-note {{non-constexpr function 'memchr' cannot be used in a constant expression}} + constexpr bool f() { + const char *c = "abcdef"; + return __builtin_char_memchr(c + 1, 'f', 1) == nullptr; + } + static_assert(f()); } namespace Strchr { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits