Author: Timm Bäder Date: 2023-06-30T11:02:25+02:00 New Revision: c442912d736946703b8a9278cb2e323c51dbefcb
URL: https://github.com/llvm/llvm-project/commit/c442912d736946703b8a9278cb2e323c51dbefcb DIFF: https://github.com/llvm/llvm-project/commit/c442912d736946703b8a9278cb2e323c51dbefcb.diff LOG: [clang][Interp][NFC] Add type checks to InterpStack::peek() Added: Modified: clang/lib/AST/Interp/InterpStack.h Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/InterpStack.h b/clang/lib/AST/Interp/InterpStack.h index 435120d0e44140..fa2f9d5b242de9 100644 --- a/clang/lib/AST/Interp/InterpStack.h +++ b/clang/lib/AST/Interp/InterpStack.h @@ -44,7 +44,7 @@ class InterpStack final { assert(ItemTypes.back() == toPrimType<T>()); ItemTypes.pop_back(); #endif - auto *Ptr = &peek<T>(); + auto *Ptr = &peekInternal<T>(); auto Value = std::move(*Ptr); Ptr->~T(); shrink(aligned_size<T>()); @@ -57,14 +57,18 @@ class InterpStack final { assert(ItemTypes.back() == toPrimType<T>()); ItemTypes.pop_back(); #endif - auto *Ptr = &peek<T>(); + auto *Ptr = &peekInternal<T>(); Ptr->~T(); shrink(aligned_size<T>()); } /// Returns a reference to the value on the top of the stack. template <typename T> T &peek() const { - return *reinterpret_cast<T *>(peekData(aligned_size<T>())); +#ifndef NDEBUG + assert(!ItemTypes.empty()); + assert(ItemTypes.back() == toPrimType<T>()); +#endif + return peekInternal<T>(); } template <typename T> T &peek(size_t Offset) const { @@ -92,6 +96,11 @@ class InterpStack final { return ((sizeof(T) + PtrAlign - 1) / PtrAlign) * PtrAlign; } + /// Like the public peek(), but without the debug type checks. + template <typename T> T &peekInternal() const { + return *reinterpret_cast<T *>(peekData(aligned_size<T>())); + } + /// Grows the stack to accommodate a value and returns a pointer to it. void *grow(size_t Size); /// Returns a pointer from the top of the stack. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits