Author: Timm Bäder Date: 2024-06-26T13:54:53+02:00 New Revision: 847d046a82a760caa1b05206d77ed0b3d7bd4be6
URL: https://github.com/llvm/llvm-project/commit/847d046a82a760caa1b05206d77ed0b3d7bd4be6 DIFF: https://github.com/llvm/llvm-project/commit/847d046a82a760caa1b05206d77ed0b3d7bd4be6.diff LOG: [clang][Interp] Fix comparing one-past-the-end pointers Added: Modified: clang/lib/AST/Interp/Pointer.h clang/test/AST/Interp/arrays.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Pointer.h b/clang/lib/AST/Interp/Pointer.h index 609367a462b00..0cd26ecf73f24 100644 --- a/clang/lib/AST/Interp/Pointer.h +++ b/clang/lib/AST/Interp/Pointer.h @@ -513,6 +513,8 @@ class Pointer { unsigned getByteOffset() const { if (isIntegralPointer()) return asIntPointer().Value + Offset; + if (isOnePastEnd()) + return PastEndMark; return Offset; } diff --git a/clang/test/AST/Interp/arrays.cpp b/clang/test/AST/Interp/arrays.cpp index 6f6fca8c1cfd8..7d231d3759421 100644 --- a/clang/test/AST/Interp/arrays.cpp +++ b/clang/test/AST/Interp/arrays.cpp @@ -26,6 +26,9 @@ static_assert(foo[2][2] == nullptr, ""); static_assert(foo[2][3] == &m, ""); static_assert(foo[2][4] == nullptr, ""); +constexpr int afterEnd[] = {1,2,3}; +static_assert(&afterEnd[3] == afterEnd + 3, ""); + constexpr int ZeroSizeArray[] = {}; constexpr int SomeInt[] = {1}; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits