[clang] [clang][bytecode] Simplify Pointer::getByteOffset() (PR #223382)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 14 05:25:30 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
Return `Offset` directly, except for block pointers. This also allows us to remove `getRawOffset()`.
---
Full diff: https://github.com/llvm/llvm-project/pull/223382.diff
2 Files Affected:
- (modified) clang/lib/AST/ByteCode/Interp.h (+2-2)
- (modified) clang/lib/AST/ByteCode/Pointer.h (+2-10)
``````````diff
diff --git a/clang/lib/AST/ByteCode/Interp.h b/clang/lib/AST/ByteCode/Interp.h
index 7c716355617080..3d8c7c813f719d 100644
--- a/clang/lib/AST/ByteCode/Interp.h
+++ b/clang/lib/AST/ByteCode/Interp.h
@@ -2614,9 +2614,9 @@ std::optional<Pointer> OffsetHelper(InterpState &S, CodePtr OpPC,
} else if (Ptr.isStringPointer()) {
int64_t NewOffset;
if constexpr (Op == ArithOp::Add)
- NewOffset = Ptr.getRawOffset() + static_cast<int64_t>(Offset);
+ NewOffset = Ptr.getByteOffset() + static_cast<int64_t>(Offset);
else
- NewOffset = Ptr.getRawOffset() - static_cast<int64_t>(Offset);
+ NewOffset = Ptr.getByteOffset() - static_cast<int64_t>(Offset);
if (NewOffset < 0 ||
NewOffset > (Ptr.asStringPointer().getLiteral()->getLength() + 1)) {
S.CCEDiag(S.Current->getSource(OpPC), diag::note_constexpr_array_index)
diff --git a/clang/lib/AST/ByteCode/Pointer.h b/clang/lib/AST/ByteCode/Pointer.h
index 5b43df9db49c4c..9f46dc615f4615 100644
--- a/clang/lib/AST/ByteCode/Pointer.h
+++ b/clang/lib/AST/ByteCode/Pointer.h
@@ -968,19 +968,11 @@ class Pointer {
/// Returns the byte offset from the start.
uint64_t getByteOffset() const {
- if (isIntegralPointer())
- return Int.Value + Offset;
- if (isTypeidPointer())
- return reinterpret_cast<uintptr_t>(Typeid.TypePtr) + Offset;
- if (isOpaquePointer())
- return Offset;
- if (isOnePastEnd())
- return PtrView::PastEndMark;
+ if (isBlockPointer())
+ return isOnePastEnd() ? PtrView::PastEndMark : Offset;
return Offset;
}
- uint64_t getRawOffset() const { return Offset; }
-
/// Returns the number of elements.
unsigned getNumElems() const {
if (isStringPointer())
``````````
</details>
https://github.com/llvm/llvm-project/pull/223382
More information about the cfe-commits
mailing list