llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Timm Baeder (tbaederr) <details> <summary>Changes</summary> Program itself is unused in that file, so just include the needed headers. --- Full diff: https://github.com/llvm/llvm-project/pull/160843.diff 3 Files Affected: - (modified) clang/lib/AST/ByteCode/EvalEmitter.h (+1) - (modified) clang/lib/AST/ByteCode/InterpBlock.h (+2-1) - (modified) clang/lib/AST/ByteCode/InterpFrame.h (+4-3) ``````````diff diff --git a/clang/lib/AST/ByteCode/EvalEmitter.h b/clang/lib/AST/ByteCode/EvalEmitter.h index e81ea67adf97a..a9f87db5d7f8d 100644 --- a/clang/lib/AST/ByteCode/EvalEmitter.h +++ b/clang/lib/AST/ByteCode/EvalEmitter.h @@ -16,6 +16,7 @@ #include "EvaluationResult.h" #include "InterpState.h" #include "PrimType.h" +#include "Record.h" #include "Source.h" namespace clang { diff --git a/clang/lib/AST/ByteCode/InterpBlock.h b/clang/lib/AST/ByteCode/InterpBlock.h index ea9f44c38842e..9b3dadca6cc14 100644 --- a/clang/lib/AST/ByteCode/InterpBlock.h +++ b/clang/lib/AST/ByteCode/InterpBlock.h @@ -115,9 +115,10 @@ class Block final { return reinterpret_cast<const std::byte *>(this) + sizeof(Block); } - template <typename T> T deref() const { + template <typename T> const T &deref() const { return *reinterpret_cast<const T *>(data()); } + template <typename T> T &deref() { return *reinterpret_cast<T *>(data()); } /// Invokes the constructor. void invokeCtor() { diff --git a/clang/lib/AST/ByteCode/InterpFrame.h b/clang/lib/AST/ByteCode/InterpFrame.h index 3cdc164e4bdda..fa9de2e1e7c6d 100644 --- a/clang/lib/AST/ByteCode/InterpFrame.h +++ b/clang/lib/AST/ByteCode/InterpFrame.h @@ -14,7 +14,8 @@ #define LLVM_CLANG_AST_INTERP_INTERPFRAME_H #include "Frame.h" -#include "Program.h" +#include "InterpBlock.h" +#include "Pointer.h" namespace clang { namespace interp { @@ -93,7 +94,7 @@ class InterpFrame final : public Frame { auto Pt = Params.find(Offset); if (Pt == Params.end()) return stackRef<T>(Offset); - return Pointer(reinterpret_cast<Block *>(Pt->second.get())).deref<T>(); + return reinterpret_cast<const Block *>(Pt->second.get())->deref<T>(); } /// Mutates a local copy of a parameter. @@ -151,7 +152,7 @@ class InterpFrame final : public Frame { /// Returns an offset to a local. template <typename T> T &localRef(unsigned Offset) const { - return getLocalPointer(Offset).deref<T>(); + return localBlock(Offset)->deref<T>(); } /// Returns a pointer to a local's block. `````````` </details> https://github.com/llvm/llvm-project/pull/160843 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
