Author: Timm Baeder Date: 2026-02-13T11:06:40+01:00 New Revision: c2b69b1a173704e246f7501f8e87268ff6afcd01
URL: https://github.com/llvm/llvm-project/commit/c2b69b1a173704e246f7501f8e87268ff6afcd01 DIFF: https://github.com/llvm/llvm-project/commit/c2b69b1a173704e246f7501f8e87268ff6afcd01.diff LOG: [clang][bytecode] Do a full CheckLoad in builtin_memcmp() (#181337) This handles unknown size arrays as well and prints the expected diagnostics. Added: Modified: clang/lib/AST/ByteCode/InterpBuiltin.cpp clang/test/AST/ByteCode/builtin-functions.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp index fe704a8e27b99..ac0e854733397 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp @@ -1990,11 +1990,7 @@ static bool interp__builtin_memcmp(InterpState &S, CodePtr OpPC, return false; } - if (PtrA.isDummy() || PtrB.isDummy()) - return false; - - if (!CheckRange(S, OpPC, PtrA, AK_Read) || - !CheckRange(S, OpPC, PtrB, AK_Read)) + if (!CheckLoad(S, OpPC, PtrA, AK_Read) || !CheckLoad(S, OpPC, PtrB, AK_Read)) return false; // Now, read both pointers to a buffer and compare those. diff --git a/clang/test/AST/ByteCode/builtin-functions.cpp b/clang/test/AST/ByteCode/builtin-functions.cpp index a0e8d61163eb0..6c49d015c1184 100644 --- a/clang/test/AST/ByteCode/builtin-functions.cpp +++ b/clang/test/AST/ByteCode/builtin-functions.cpp @@ -1583,6 +1583,10 @@ namespace Memcmp { static_assert(__builtin_bcmp("abab\0banana", "abab\0canada", 6) != 0); static_assert(__builtin_bcmp("abab\0banana", "abab\0canada", 5) == 0); + constexpr char abc[] = /* missing */; // both-error {{expected expression}} \ + // both-note {{declared here}} + static_assert(__builtin_bcmp(abc, abc, 2) == 0); // both-error {{not an integral constant expression}} \ + // both-note {{initializer of 'abc' is unknown}} static_assert(__builtin_wmemcmp(L"abaa", L"abba", 3) == -1); static_assert(__builtin_wmemcmp(L"abaa", L"abba", 2) == 0); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
