Author: Timm Bäder Date: 2024-07-16T07:24:08+02:00 New Revision: ff96ad84f52022af295d11749f106480e7292a89
URL: https://github.com/llvm/llvm-project/commit/ff96ad84f52022af295d11749f106480e7292a89 DIFF: https://github.com/llvm/llvm-project/commit/ff96ad84f52022af295d11749f106480e7292a89.diff LOG: [clang][Interp][NFC] Add Pointer::isDereferencable() We currently have a few places where we check whether a pointer can be read from at all. Add a function to do that. Added: Modified: clang/lib/AST/Interp/Pointer.h Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Pointer.h b/clang/lib/AST/Interp/Pointer.h index 6e9e8675306ef..28bc42985adb2 100644 --- a/clang/lib/AST/Interp/Pointer.h +++ b/clang/lib/AST/Interp/Pointer.h @@ -584,6 +584,7 @@ class Pointer { assert(isLive() && "Invalid pointer"); assert(isBlockPointer()); assert(asBlockPointer().Pointee); + assert(isDereferencable()); assert(Offset + sizeof(T) <= asBlockPointer().Pointee->getDescriptor()->getAllocSize()); @@ -603,6 +604,17 @@ class Pointer { sizeof(InitMapPtr))[I]; } + /// Whether this block can be read from at all. This is only true for + /// block pointers that point to a valid location inside that block. + bool isDereferencable() const { + if (!isBlockPointer()) + return false; + if (isPastEnd()) + return false; + + return true; + } + /// Initializes a field. void initialize() const; /// Activats a field. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits