|
clang 23.0.0git
|
A pointer to a memory block, live or dead. More...
#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/AST/ByteCode/Pointer.h"
Public Member Functions | |
| Pointer () | |
| Pointer (IntPointer &&IntPtr) | |
| Pointer (Block *B) | |
| Pointer (Block *B, uint64_t BaseAndOffset) | |
| Pointer (const Pointer &P) | |
| Pointer (Pointer &&P) | |
| Pointer (uint64_t Address, const Descriptor *Desc, uint64_t Offset=0) | |
| Pointer (const Function *F, uint64_t Offset=0) | |
| Pointer (const Type *TypePtr, const Type *TypeInfoType, uint64_t Offset=0) | |
| Pointer (Block *Pointee, unsigned Base, uint64_t Offset) | |
| ~Pointer () | |
| Pointer & | operator= (const Pointer &P) |
| Pointer & | operator= (Pointer &&P) |
| bool | operator== (const Pointer &P) const |
| Equality operators are just for tests. | |
| bool | operator!= (const Pointer &P) const |
| APValue | toAPValue (const ASTContext &ASTCtx) const |
| Converts the pointer to an APValue. | |
| std::string | toDiagnosticString (const ASTContext &Ctx) const |
| Converts the pointer to a string usable in diagnostics. | |
| uint64_t | getIntegerRepresentation () const |
| std::optional< APValue > | toRValue (const Context &Ctx, QualType ResultType) const |
| Converts the pointer to an APValue that is an rvalue. | |
| Pointer | atIndex (uint64_t Idx) const |
| Offsets a pointer inside an array. | |
| Pointer | atField (unsigned Off) const |
| Creates a pointer to a field. | |
| Pointer | atFieldSub (unsigned Off) const |
| Subtract the given offset from the current Base and Offset of the pointer. | |
| Pointer | narrow () const |
| Restricts the scope of an array element pointer. | |
| Pointer | expand () const |
| Expands a pointer to the containing array, undoing narrowing. | |
| bool | isZero () const |
| Checks if the pointer is null. | |
| bool | isLive () const |
| Checks if the pointer is live. | |
| bool | isField () const |
| Checks if the item is a field in an object. | |
| const Descriptor * | getDeclDesc () const |
| Accessor for information about the declaration site. | |
| SourceLocation | getDeclLoc () const |
| DeclTy | getSource () const |
| Returns the expression or declaration the pointer has been created for. | |
| Pointer | getBase () const |
| Returns a pointer to the object of which this pointer is a field. | |
| Pointer | getArray () const |
| Returns the parent array. | |
| const Descriptor * | getFieldDesc () const |
| Accessors for information about the innermost field. | |
| QualType | getType () const |
| Returns the type of the innermost field. | |
| Pointer | getDeclPtr () const |
| size_t | elemSize () const |
| Returns the element size of the innermost field. | |
| size_t | getSize () const |
| Returns the total size of the innermost field. | |
| unsigned | getOffset () const |
| Returns the offset into an array. | |
| bool | isArrayRoot () const |
| Whether this array refers to an array, but not to the first element. | |
| bool | inArray () const |
| Checks if the innermost field is an array. | |
| bool | inUnion () const |
| bool | inPrimitiveArray () const |
| Checks if the structure is a primitive array. | |
| bool | isUnknownSizeArray () const |
| Checks if the structure is an array of unknown size. | |
| bool | isArrayElement () const |
| Checks if the pointer points to an array. | |
| bool | isRoot () const |
| Pointer points directly to a block. | |
| bool | canBeInitialized () const |
| If this pointer has an InlineDescriptor we can use to initialize. | |
| const BlockPointer & | asBlockPointer () const |
| const IntPointer & | asIntPointer () const |
| const FunctionPointer & | asFunctionPointer () const |
| const TypeidPointer & | asTypeidPointer () const |
| bool | isBlockPointer () const |
| bool | isIntegralPointer () const |
| bool | isFunctionPointer () const |
| bool | isTypeidPointer () const |
| const Record * | getRecord () const |
| Returns the record descriptor of a class. | |
| const Record * | getElemRecord () const |
| Returns the element record type, if this is a non-primive array. | |
| const FieldDecl * | getField () const |
| Returns the field information. | |
| bool | isExtern () const |
| Checks if the storage is extern. | |
| bool | isStatic () const |
| Checks if the storage is static. | |
| bool | isTemporary () const |
| Checks if the storage is temporary. | |
| bool | isDynamic () const |
| Checks if the storage has been dynamically allocated. | |
| bool | isStaticTemporary () const |
| Checks if the storage is a static temporary. | |
| bool | isMutable () const |
| Checks if the field is mutable. | |
| bool | isWeak () const |
| bool | isActive () const |
| Checks if the object is active. | |
| bool | isBaseClass () const |
| Checks if a structure is a base class. | |
| bool | isVirtualBaseClass () const |
| bool | isDummy () const |
| Checks if the pointer points to a dummy value. | |
| bool | isConst () const |
| Checks if an object or a subfield is mutable. | |
| bool | isConstInMutable () const |
| bool | isVolatile () const |
| Checks if an object or a subfield is volatile. | |
| UnsignedOrNone | getDeclID () const |
| Returns the declaration ID. | |
| uint64_t | getByteOffset () const |
| Returns the byte offset from the start. | |
| unsigned | getNumElems () const |
| Returns the number of elements. | |
| const Block * | block () const |
| const std::byte * | getRawAddress () const |
| If backed by actual data (i.e. | |
| int64_t | getIndex () const |
| Returns the index into an array. | |
| bool | isOnePastEnd () const |
| Checks if the index is one past end. | |
| bool | isPastEnd () const |
| Checks if the pointer points past the end of the object. | |
| bool | isElementPastEnd () const |
| Checks if the pointer is an out-of-bounds element pointer. | |
| bool | isZeroSizeArray () const |
| Checks if the pointer is pointing to a zero-size array. | |
| bool | canDeref (PrimType T) const |
| Checks whether the pointer can be dereferenced to the given PrimType. | |
| template<typename T> | |
| T & | deref () const |
| Dereferences the pointer, if it's live. | |
| template<typename T> | |
| T & | elem (unsigned I) const |
Dereferences the element at index I. | |
| bool | isDereferencable () const |
| Whether this block can be read from at all. | |
| void | initialize () const |
| Initializes a field. | |
| void | initializeElement (unsigned Index) const |
| Initialized the given element of a primitive array. | |
| void | initializeAllElements () const |
| Initialize all elements of a primitive array at once. | |
| bool | isInitialized () const |
| Checks if an object was initialized. | |
| bool | isElementInitialized (unsigned Index) const |
| Like isInitialized(), but for primitive arrays. | |
| bool | allElementsInitialized () const |
| bool | allElementsAlive () const |
| bool | isElementAlive (unsigned Index) const |
| void | activate () const |
| Activats a field. | |
| void | deactivate () const |
| Deactivates an entire strurcutre. | |
| Lifetime | getLifetime () const |
| void | startLifetime () const |
| Start the lifetime of this pointer. | |
| void | endLifetime () const |
| Ends the lifetime of the pointer. | |
| Pointer | stripBaseCasts () const |
| Strip base casts from this Pointer. | |
| ComparisonCategoryResult | compare (const Pointer &Other) const |
| Compare two pointers. | |
| bool | pointsToLiteral () const |
| Whether this points to a block that's been created for a "literal lvalue", i.e. | |
| bool | pointsToStringLiteral () const |
| void | print (llvm::raw_ostream &OS) const |
| Prints the pointer. | |
| size_t | computeOffsetForComparison (const ASTContext &ASTCtx) const |
| Compute an integer that can be used to compare this pointer to another one. | |
Static Public Member Functions | |
| static bool | hasSameBase (const Pointer &A, const Pointer &B) |
| Checks if two pointers are comparable. | |
| static bool | hasSameArray (const Pointer &A, const Pointer &B) |
| Checks if two pointers can be subtracted. | |
| static bool | pointToSameBlock (const Pointer &A, const Pointer &B) |
| Checks if both given pointers point to the same block. | |
| static std::optional< std::pair< Pointer, Pointer > > | computeSplitPoint (const Pointer &A, const Pointer &B) |
Friends | |
| class | Block |
| class | DeadBlock |
| class | MemberPointer |
| class | InterpState |
| class | DynamicAllocator |
| class | Program |
A pointer to a memory block, live or dead.
This object can be allocated into interpreter stack frames. If pointing to a live block, it is a link in the chain of pointers pointing to the block.
In the simplest form, a Pointer has a Block* (the pointee) and both Base and Offset are 0, which means it will point to raw data.
The Base field is used to access metadata about the data. For primitive arrays, the Base is followed by an InitMap. In a variety of cases, the Base is preceded by an InlineDescriptor, which is used to track the initialization state, among other things.
The Offset field is used to access the actual data. In other words, the data the pointer decribes can be found at Pointee->rawData() + Pointer.Offset.
/// Pointee Offset /// │ │ /// │ │ /// ▼ ▼ /// ┌───────┬────────────┬─────────┬────────────────────────────┐ /// │ Block │ InlineDesc │ InitMap │ Actual Data │ /// └───────┴────────────┴─────────┴────────────────────────────┘ /// ▲ /// │ /// │ /// Base ///
|
inline |
Definition at line 103 of file Pointer.h.
References Int, and clang::nullptr.
Referenced by activate(), atField(), atFieldSub(), atIndex(), compare(), computeOffsetForComparison(), computeSplitPoint(), expand(), getArray(), getBase(), getDeclPtr(), hasSameArray(), hasSameBase(), narrow(), operator!=(), operator=(), operator=(), operator==(), Pointer(), Pointer(), Pointer(), Pointer(), pointToSameBlock(), stripBaseCasts(), toAPValue(), and toRValue().
|
inline |
| Pointer::Pointer | ( | Block * | B | ) |
Definition at line 27 of file Pointer.cpp.
| Pointer::Pointer | ( | Block * | B, |
| uint64_t | BaseAndOffset ) |
Definition at line 31 of file Pointer.cpp.
| Pointer::Pointer | ( | const Pointer & | P | ) |
Definition at line 44 of file Pointer.cpp.
References clang::interp::Block, BS, Fn, clang::interp::Fn, Int, clang::interp::Int, Pointer(), Typeid, and clang::interp::Typeid.
| Pointer::Pointer | ( | Pointer && | P | ) |
Definition at line 64 of file Pointer.cpp.
References clang::interp::Block, BS, Fn, clang::interp::Fn, Int, clang::interp::Int, Pointer(), Typeid, and clang::interp::Typeid.
|
inline |
|
inline |
Definition at line 34 of file Pointer.cpp.
References Block, BS, clang::interp::Block::getDescriptor(), and clang::interp::Descriptor::getMetadataSize().
| Pointer::~Pointer | ( | ) |
Definition at line 83 of file Pointer.cpp.
References Block, BS, and isBlockPointer().
| void Pointer::activate | ( | ) | const |
Activats a field.
Definition at line 634 of file Pointer.cpp.
References activate(), atField(), BS, deactivate(), std::function, getBase(), getRecord(), inUnion(), clang::interp::InlineDescriptor::IsActive, isRoot(), clang::interp::Record::isUnion(), and Pointer().
Referenced by clang::interp::Activate(), activate(), clang::interp::ActivateThisField(), clang::interp::CheckNewTypeMismatch(), clang::interp::copyRecord(), clang::interp::FinishInitActivate(), clang::interp::FinishInitActivatePop(), and clang::interp::FinishInitGlobal().
| bool Pointer::allElementsAlive | ( | ) | const |
Definition at line 617 of file Pointer.cpp.
References clang::interp::InitMap::allElementsAlive(), clang::interp::InitMapPtr::allInitialized(), block(), BS, clang::interp::Block::getBlockDesc(), getFieldDesc(), clang::interp::InitMapPtr::hasInitMap(), clang::interp::Initialized, clang::interp::GlobalInlineDescriptor::InitState, isArrayRoot(), isRoot(), and isStatic().
| bool Pointer::allElementsInitialized | ( | ) | const |
Definition at line 600 of file Pointer.cpp.
References clang::interp::InitMapPtr::allInitialized(), block(), BS, clang::interp::Block::getBlockDesc(), getFieldDesc(), clang::interp::Initialized, clang::interp::GlobalInlineDescriptor::InitState, isArrayRoot(), isRoot(), and isStatic().
Referenced by clang::interp::CheckArrayInitialized().
|
inlinenodiscard |
Definition at line 462 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by clang::interp::DynamicAllocator::cleanup(), computeSplitPoint(), clang::interp::DeadBlock::DeadBlock(), hasSameBase(), isInitialized(), and clang::interp::OffsetHelper().
|
inlinenodiscard |
Definition at line 470 of file Pointer.h.
References Fn, and isFunctionPointer().
Referenced by clang::interp::CallPtr(), clang::interp::OffsetHelper(), and toAPValue().
|
inlinenodiscard |
Definition at line 466 of file Pointer.h.
References Int, and isIntegralPointer().
Referenced by clang::interp::getField(), clang::interp::GetPtrBase(), clang::interp::GetPtrBasePop(), clang::interp::OffsetHelper(), toAPValue(), and toDiagnosticString().
|
inlinenodiscard |
Definition at line 474 of file Pointer.h.
References isTypeidPointer(), and Typeid.
Referenced by computeOffsetForComparison(), and print().
Creates a pointer to a field.
Definition at line 179 of file Pointer.h.
References BS, isBlockPointer(), and Pointer().
Referenced by activate(), clang::interp::ActivateThisField(), clang::interp::CheckFieldsInitialized(), clang::interp::collectBlocks(), clang::interp::copyRecord(), clang::interp::endLifetimeRecurse(), enumerateData(), clang::interp::finishGlobalRecurse(), clang::interp::MemberPointer::getBase(), clang::interp::GetField(), clang::interp::getField(), clang::interp::GetFieldPop(), clang::interp::GetPtrBase(), clang::interp::GetPtrBasePop(), clang::interp::InitBitField(), clang::interp::InitBitFieldActivate(), clang::interp::InitField(), clang::interp::InitFieldActivate(), clang::interp::SetField(), clang::interp::SetThreeWayComparisonField(), clang::interp::startLifetimeRecurse(), clang::interp::MemberPointer::toPointer(), and clang::interp::zeroAll().
Subtract the given offset from the current Base and Offset of the pointer.
Definition at line 187 of file Pointer.h.
Referenced by clang::interp::MemberPointer::getBase(), and clang::interp::GetPtrDerivedPop().
|
inlinenodiscard |
Offsets a pointer inside an array.
Definition at line 162 of file Pointer.h.
References BS, elemSize(), Fn, getDeclDesc(), getFieldDesc(), getSize(), Int, isFunctionPointer(), isIntegralPointer(), and Pointer().
Referenced by clang::interp::arePotentiallyOverlappingStringLiterals(), clang::interp::ArrayDecay(), clang::interp::ArrayElem(), clang::interp::ArrayElemPop(), clang::interp::CheckArrayInitialized(), clang::interp::collectBlocks(), clang::interp::CopyArray(), clang::interp::copyComposite(), clang::interp::endLifetimeRecurse(), enumerateData(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::finishGlobalRecurse(), clang::interp::interp__builtin_elementwise_countzeroes(), clang::interp::interp__builtin_is_aligned_up_down(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_nan(), clang::interp::interp__builtin_strcmp(), clang::interp::interp__builtin_strlen(), clang::interp::OffsetHelper(), clang::interp::RunDestructors(), clang::interp::startLifetimeRecurse(), and clang::interp::zeroAll().
|
inline |
Definition at line 617 of file Pointer.h.
Referenced by allElementsAlive(), allElementsInitialized(), clang::interp::Call(), clang::interp::CallVirt(), clang::interp::CheckConst(), clang::interp::CheckDestructor(), clang::interp::CheckFinalLoad(), clang::interp::CheckLoad(), clang::interp::CheckMutable(), clang::interp::CheckNewTypeMismatch(), clang::interp::CheckStore(), clang::interp::CheckVolatile(), clang::interp::collectBlocks(), clang::interp::Program::dump(), clang::interp::Free(), clang::interp::getField(), clang::interp::interp__builtin_is_within_lifetime(), clang::interp::interp__builtin_operator_delete(), clang::interp::interp__builtin_strlen(), isElementInitialized(), isInitialized(), clang::interp::operator<<(), operator=(), pointsToLiteral(), pointsToStringLiteral(), pointToSameBlock(), toAPValue(), and clang::interp::MemberPointer::toPointer().
|
inline |
If this pointer has an InlineDescriptor we can use to initialize.
Definition at line 455 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by clang::interp::Activate(), clang::interp::ActivateThisField(), clang::interp::FinishInit(), clang::interp::FinishInitActivate(), clang::interp::FinishInitActivatePop(), clang::interp::FinishInitGlobal(), clang::interp::FinishInitPop(), and clang::interp::interp__builtin_overflowop().
Checks whether the pointer can be dereferenced to the given PrimType.
Definition at line 678 of file Pointer.h.
References getFieldDesc().
Referenced by clang::interp::Load(), clang::interp::LoadPop(), and toRValue().
|
inline |
Compare two pointers.
Definition at line 794 of file Pointer.h.
References clang::Equal, clang::Greater, hasSameBase(), clang::Less, clang::Other, Pointer(), and clang::Unordered.
| size_t Pointer::computeOffsetForComparison | ( | const ASTContext & | ASTCtx | ) | const |
Compute an integer that can be used to compare this pointer to another one.
Compute an offset that can be used to compare the pointer to another one with the same base.
This is usually NOT the same as the pointer offset regarding the AST record layout.
To get accurate results, we basically have to compute the lvalue offset using the ASTRecordLayout.
FIXME: We're still mixing values from the record layout with our internal offsets, which will inevitably lead to cryptic errors.
Definition at line 369 of file Pointer.cpp.
References asTypeidPointer(), clang::interp::Block, elemSize(), expand(), clang::interp::Fn, getArray(), clang::ASTContext::getASTRecordLayout(), getBase(), getDeclDesc(), getField(), clang::FieldDecl::getFieldIndex(), clang::ASTRecordLayout::getFieldOffset(), getIndex(), getIntegerRepresentation(), clang::interp::Record::getNumVirtualBases(), clang::CharUnits::getQuantity(), getRecord(), clang::interp::Descriptor::getType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeSizeInChars(), Int, clang::interp::Int, isArrayElement(), isBaseClass(), isOnePastEnd(), isRoot(), isVirtualBaseClass(), clang::interp::InlineDescriptor::Offset, Pointer(), clang::Result, clang::ASTContext::toCharUnitsFromBits(), clang::interp::Typeid, and clang::interp::TypeidPointer::TypePtr.
Referenced by clang::interp::CmpHelperEQ< Pointer >().
|
static |
Definition at line 744 of file Pointer.cpp.
References asBlockPointer(), clang::interp::BlockPointer::Base, getBase(), isBlockPointer(), isRoot(), clang::interp::BlockPointer::Pointee, and Pointer().
Referenced by clang::interp::CmpHelper< Pointer >().
| void Pointer::deactivate | ( | ) | const |
Deactivates an entire strurcutre.
Definition at line 688 of file Pointer.cpp.
Referenced by activate().
|
inline |
Dereferences the pointer, if it's live.
Definition at line 687 of file Pointer.h.
References BS, isArrayRoot(), isBlockPointer(), isDereferencable(), and isLive().
Referenced by clang::interp::assignInteger(), clang::interp::collectBlocks(), clang::interp::copyComposite(), clang::interp::copyPrimitiveMemory(), clang::interp::copyPrimitiveMemory(), clang::interp::copyRecord(), clang::interp::DoBitCastPtr(), clang::interp::finishGlobalRecurse(), clang::interp::IncDecFloatHelper(), clang::interp::IncDecHelper(), clang::interp::IncDecPtrHelper(), clang::interp::InitField(), clang::interp::InitFieldActivate(), clang::interp::InitGlobal(), clang::interp::InitGlobalTemp(), clang::interp::interp__builtin_elementwise_countzeroes(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_nan(), clang::interp::interp__builtin_strcmp(), clang::interp::interp__builtin_strlen(), clang::interp::Load(), clang::interp::LoadPop(), clang::interp::readPointerToBuffer(), clang::interp::InterpFrame::setParam(), clang::interp::SetThreeWayComparisonField(), clang::interp::StoreActivate(), clang::interp::StoreActivatePop(), clang::interp::StoreBitFieldActivate(), clang::interp::StoreBitFieldActivatePop(), and toRValue().
|
inline |
Dereferences the element at index I.
This is equivalent to atIndex(I).deref<T>().
Definition at line 703 of file Pointer.h.
References BS, clang::interp::Descriptor::getElemSize(), getFieldDesc(), getNumElems(), isBlockPointer(), isDereferencable(), and isLive().
Referenced by clang::interp::ArrayElem(), clang::interp::ArrayElemPop(), clang::interp::collectBlocks(), clang::interp::convertBoolVectorToInt(), clang::interp::CopyArray(), clang::interp::copyComposite(), clang::interp::Program::createGlobalString(), clang::interp::Divc(), clang::interp::Context::evaluateString(), clang::interp::Context::evaluateStrlen(), clang::interp::interp__builtin_elementwise_abs(), clang::interp::interp__builtin_elementwise_fp_binop(), clang::interp::interp__builtin_elementwise_int_binop(), clang::interp::interp__builtin_elementwise_int_unaryop(), clang::interp::interp__builtin_elementwise_maxmin(), clang::interp::interp__builtin_elementwise_triop(), clang::interp::interp__builtin_elementwise_triop_fp(), clang::interp::interp__builtin_ia32_addsub(), clang::interp::interp__builtin_ia32_cmp_mask(), clang::interp::interp__builtin_ia32_cvt_mask2vec(), clang::interp::interp__builtin_ia32_cvt_vec2mask(), clang::interp::interp__builtin_ia32_cvtpd2ps(), clang::interp::interp__builtin_ia32_cvtsd2ss(), clang::interp::interp__builtin_ia32_gfni_mul(), clang::interp::interp__builtin_ia32_multishiftqb(), clang::interp::interp__builtin_ia32_pclmulqdq(), clang::interp::interp__builtin_ia32_pmul(), clang::interp::interp__builtin_ia32_shift_with_count(), clang::interp::interp__builtin_ia32_shufbitqmb_mask(), clang::interp::interp__builtin_ia32_shuffle_generic(), clang::interp::interp__builtin_ia32_test_op(), clang::interp::interp__builtin_ia32_vcvtps2ph(), clang::interp::interp__builtin_ia32_vpconflict(), clang::interp::interp__builtin_scalar_fp_round_mask_binop(), clang::interp::interp__builtin_select(), clang::interp::interp__builtin_select_scalar(), clang::interp::interp__builtin_vec_ext(), clang::interp::interp__builtin_vec_set(), clang::interp::interp__builtin_vector_reduce(), clang::interp::interp__builtin_x86_extract_vector(), clang::interp::interp__builtin_x86_extract_vector_masked(), clang::interp::interp__builtin_x86_insert_subvector(), clang::interp::interp__builtin_x86_pack(), clang::interp::interp_builtin_horizontal_fp_binop(), clang::interp::interp_builtin_horizontal_int_binop(), clang::interp::interp_builtin_ia32_gfni_affine(), and clang::interp::Mulc().
|
inline |
Returns the element size of the innermost field.
Definition at line 369 of file Pointer.h.
References BS, getDeclDesc(), clang::interp::Descriptor::getElemSize(), getFieldDesc(), clang::interp::Descriptor::getSize(), Int, and isIntegralPointer().
Referenced by clang::interp::arePotentiallyOverlappingStringLiterals(), atIndex(), computeOffsetForComparison(), clang::interp::Context::evaluateString(), clang::interp::Context::evaluateStrlen(), getIndex(), getIntegerRepresentation(), getNumElems(), clang::interp::interp__builtin_memcpy(), and clang::interp::OffsetHelper().
| void Pointer::endLifetime | ( | ) | const |
Ends the lifetime of the pointer.
This works for pointer with an InlineDescriptor as well as primitive array elements. This function is used by std::destroy_at.
Definition at line 526 of file Pointer.cpp.
References clang::interp::InitMapPtr::allInitialized(), BS, clang::interp::Ended, clang::interp::InitMap::endElementLifetime(), getFieldDesc(), getIndex(), getLifetime(), clang::interp::Descriptor::getNumElems(), clang::interp::InitMapPtr::hasInitMap(), inArray(), isArrayRoot(), isBlockPointer(), and clang::interp::InitMapPtr::setInitMap().
Referenced by clang::interp::endLifetimeRecurse().
|
inlinenodiscard |
Expands a pointer to the containing array, undoing narrowing.
Definition at line 229 of file Pointer.h.
References Block, BS, getDeclDesc(), clang::interp::Block::getDescriptor(), getSize(), inPrimitiveArray(), clang::interp::Descriptor::IsArray, isBlockPointer(), isElementPastEnd(), isRoot(), Next, and Pointer().
Referenced by computeOffsetForComparison(), clang::interp::computePointerOffset(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::ExpandPtr(), clang::interp::interp__builtin_memcpy(), clang::interp::pointsToLastObject(), and toAPValue().
|
inlinenodiscard |
Returns the parent array.
Definition at line 326 of file Pointer.h.
Referenced by computeOffsetForComparison(), clang::interp::computePointerOffset(), getLifetime(), clang::interp::pointsToLastObject(), and toAPValue().
|
inlinenodiscard |
Returns a pointer to the object of which this pointer is a field.
Definition at line 317 of file Pointer.h.
Referenced by activate(), clang::interp::CheckActive(), clang::interp::CheckNewTypeMismatch(), clang::interp::CheckVolatile(), computeOffsetForComparison(), clang::interp::computePointerOffset(), computeSplitPoint(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::pointsToLastObject(), stripBaseCasts(), and toAPValue().
|
inline |
Returns the byte offset from the start.
Definition at line 600 of file Pointer.h.
References Int, isIntegralPointer(), isOnePastEnd(), isTypeidPointer(), and Typeid.
Referenced by clang::interp::CheckDowncast(), clang::interp::CmpHelper< Pointer >(), clang::interp::getField(), and clang::interp::OffsetHelper().
|
inline |
Accessor for information about the declaration site.
Definition at line 292 of file Pointer.h.
References BS, Int, isBlockPointer(), isFunctionPointer(), isIntegralPointer(), and isTypeidPointer().
Referenced by atIndex(), clang::interp::CheckBCPResult(), clang::interp::CheckConstant(), clang::interp::CheckDowncast(), clang::interp::CheckExtern(), clang::interp::CheckFieldsInitialized(), clang::interp::CheckLiteralType(), computeOffsetForComparison(), clang::interp::Destroy(), clang::interp::DiagnoseUninitialized(), elemSize(), clang::interp::evaluateBuiltinObjectSize(), expand(), clang::interp::Free(), getDeclLoc(), clang::interp::GetDynamicDecl(), getFieldDesc(), clang::interp::GetPtrDerivedPop(), getSource(), clang::interp::InitGlobalTemp(), clang::interp::InitGlobalTempComp(), clang::interp::interp__builtin_assume_aligned(), clang::interp::interp__builtin_is_aligned_up_down(), clang::interp::interp__builtin_is_within_lifetime(), clang::interp::interp__builtin_operator_delete(), isConst(), clang::interp::isConstexprUnknown(), isVolatile(), toAPValue(), and clang::interp::Context::tryEvaluateObjectSize().
|
inline |
Returns the declaration ID.
Definition at line 591 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by clang::interp::CheckConstant(), and CheckGlobal().
|
inline |
Definition at line 302 of file Pointer.h.
References getDeclDesc(), and clang::interp::Descriptor::getLocation().
Referenced by clang::interp::CheckDeleteSource(), and clang::interp::CheckLive().
|
inlinenodiscard |
Definition at line 366 of file Pointer.h.
Referenced by clang::interp::CheckDowncast(), and toAPValue().
|
inline |
Returns the element record type, if this is a non-primive array.
Definition at line 487 of file Pointer.h.
References clang::interp::Descriptor::ElemDesc, clang::interp::Descriptor::ElemRecord, and getFieldDesc().
Referenced by clang::interp::CheckArrayInitialized().
|
inline |
Returns the field information.
Definition at line 492 of file Pointer.h.
References getFieldDesc().
Referenced by clang::interp::CheckArrayInitialized(), clang::interp::CheckMutable(), clang::interp::CheckVolatile(), computeOffsetForComparison(), clang::interp::computePointerOffset(), clang::interp::DoBitCastPtr(), and clang::interp::pointsToLastObject().
|
inline |
Accessors for information about the innermost field.
Definition at line 336 of file Pointer.h.
References getDeclDesc(), Int, isIntegralPointer(), and isRoot().
Referenced by allElementsAlive(), allElementsInitialized(), clang::interp::ArrayElem(), clang::interp::ArrayElemPop(), atIndex(), clang::interp::CallVirt(), canDeref(), clang::interp::checkConstructor(), clang::interp::CheckNewTypeMismatch(), clang::interp::CheckVolatile(), clang::interp::CmpHelperEQ< Pointer >(), clang::interp::collectBlocks(), clang::interp::computePointerOffset(), clang::interp::convertBoolVectorToInt(), clang::interp::copyComposite(), clang::interp::copyRecord(), clang::interp::DoBitCast(), clang::interp::DoBitCastPtr(), clang::interp::DoMemcpy(), elem(), elemSize(), endLifetime(), clang::interp::endLifetimeRecurse(), enumerateData(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::Context::evaluateString(), clang::interp::Context::evaluateStrlen(), clang::interp::finishGlobalRecurse(), getElemRecord(), clang::interp::getElemType(), clang::interp::getField(), getField(), getOffset(), getRecord(), getSize(), getType(), hasSameArray(), inArray(), initialize(), initializeAllElements(), initializeElement(), inPrimitiveArray(), clang::interp::interp__builtin_elementwise_abs(), clang::interp::interp__builtin_elementwise_countzeroes(), clang::interp::interp__builtin_elementwise_int_unaryop(), clang::interp::interp__builtin_ia32_cvt_mask2vec(), clang::interp::interp__builtin_ia32_cvt_vec2mask(), clang::interp::interp__builtin_ia32_vcvtps2ph(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_memcpy(), clang::interp::interp__builtin_nan(), clang::interp::interp__builtin_operator_delete(), clang::interp::interp__builtin_select(), clang::interp::interp__builtin_strcmp(), clang::interp::interp__builtin_strlen(), clang::interp::interp__builtin_vec_ext(), clang::interp::interp__builtin_vector_reduce(), clang::interp::interp__builtin_x86_extract_vector(), clang::interp::interp__builtin_x86_extract_vector_masked(), clang::interp::interp__builtin_x86_insert_subvector(), isElementAlive(), isElementInitialized(), isField(), isInitialized(), isUnknownSizeArray(), clang::interp::isUserWritingOffTheEnd(), isZeroSizeArray(), clang::interp::OffsetHelper(), clang::interp::operator<<(), startLifetime(), clang::interp::startLifetimeRecurse(), toAPValue(), toRValue(), and clang::interp::zeroAll().
|
inline |
Returns the index into an array.
Definition at line 627 of file Pointer.h.
References BS, elemSize(), getIntegerRepresentation(), getOffset(), isBlockPointer(), and isZero().
Referenced by clang::interp::arePotentiallyOverlappingStringLiterals(), clang::interp::CheckBCPResult(), computeOffsetForComparison(), clang::interp::computePointerOffset(), endLifetime(), enumerateData(), clang::interp::Context::evaluateString(), clang::interp::Context::evaluateStrlen(), clang::interp::Free(), getLifetime(), initialize(), clang::interp::interp__builtin_is_aligned_up_down(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_memcpy(), clang::interp::interp__builtin_strcmp(), clang::interp::interp__builtin_strlen(), isInitialized(), clang::interp::OffsetHelper(), clang::interp::operator<<(), startLifetime(), clang::interp::SubPtr(), and toAPValue().
|
inline |
Definition at line 149 of file Pointer.h.
References BS, elemSize(), Fn, Int, isFunctionPointer(), and isIntegralPointer().
Referenced by clang::interp::CastPointerIntegral(), clang::interp::CastPointerIntegralAP(), clang::interp::CastPointerIntegralAPS(), clang::interp::CmpHelperEQ< Pointer >(), computeOffsetForComparison(), getIndex(), clang::interp::interp__builtin_atomic_lock_free(), clang::interp::interp__builtin_memcpy(), clang::interp::OffsetHelper(), and clang::interp::SubPtr().
|
inline |
Definition at line 751 of file Pointer.h.
References clang::interp::InitMapPtr::allInitialized(), BS, clang::interp::Ended, getArray(), getIndex(), getLifetime(), clang::interp::InitMapPtr::hasInitMap(), inArray(), isArrayRoot(), isBlockPointer(), clang::interp::InitMap::isElementAlive(), and clang::interp::Started.
Referenced by clang::interp::CheckDestructor(), clang::interp::CheckFinalLoad(), clang::interp::CheckLoad(), clang::interp::CheckStore(), clang::interp::Destroy(), endLifetime(), clang::interp::endLifetimeRecurse(), getLifetime(), clang::interp::interp__builtin_is_within_lifetime(), startLifetime(), and clang::interp::startLifetimeRecurse().
|
inline |
Returns the number of elements.
Definition at line 611 of file Pointer.h.
References elemSize(), getSize(), and isBlockPointer().
Referenced by clang::interp::arePotentiallyOverlappingStringLiterals(), clang::interp::computePointerOffset(), clang::interp::convertBoolVectorToInt(), elem(), clang::interp::Context::evaluateString(), clang::interp::Context::evaluateStrlen(), initializeElement(), clang::interp::interp__builtin_elementwise_abs(), clang::interp::interp__builtin_elementwise_countzeroes(), clang::interp::interp__builtin_elementwise_int_unaryop(), clang::interp::interp__builtin_ia32_cmp_mask(), clang::interp::interp__builtin_ia32_cvt_mask2vec(), clang::interp::interp__builtin_ia32_cvt_vec2mask(), clang::interp::interp__builtin_ia32_cvtpd2ps(), clang::interp::interp__builtin_ia32_gfni_mul(), clang::interp::interp__builtin_ia32_movmsk_op(), clang::interp::interp__builtin_ia32_phminposuw(), clang::interp::interp__builtin_ia32_pternlog(), clang::interp::interp__builtin_ia32_test_op(), clang::interp::interp__builtin_is_aligned_up_down(), clang::interp::interp__builtin_memcmp(), clang::interp::interp__builtin_memcpy(), clang::interp::interp__builtin_nan(), clang::interp::interp__builtin_select(), clang::interp::interp__builtin_vec_ext(), clang::interp::interp__builtin_vector_reduce(), clang::interp::interp__builtin_x86_extract_vector(), clang::interp::interp__builtin_x86_extract_vector_masked(), clang::interp::interp__builtin_x86_insert_subvector(), clang::interp::OffsetHelper(), clang::interp::SubPtr(), and toAPValue().
|
inline |
Returns the offset into an array.
Definition at line 387 of file Pointer.h.
References BS, getFieldDesc(), and isBlockPointer().
Referenced by clang::interp::CmpHelperEQ< Pointer >(), getIndex(), and isOnePastEnd().
|
inline |
If backed by actual data (i.e.
a block pointer), return an address to that data.
Definition at line 621 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by clang::interp::arePotentiallyOverlappingStringLiterals(), clang::interp::Context::evaluateString(), and clang::interp::Context::evaluateStrlen().
|
inline |
Returns the record descriptor of a class.
Definition at line 485 of file Pointer.h.
References clang::interp::Descriptor::ElemRecord, and getFieldDesc().
Referenced by activate(), clang::interp::CheckActive(), clang::interp::CheckFieldsInitialized(), clang::interp::EvaluationResult::checkFullyInitialized(), clang::interp::CheckNewTypeMismatch(), computeOffsetForComparison(), clang::interp::computePointerOffset(), clang::interp::endLifetimeRecurse(), clang::interp::finishGlobalRecurse(), clang::interp::GetPtrDerivedPop(), clang::interp::pointsToLastObject(), clang::interp::SetThreeWayComparisonField(), clang::interp::startLifetimeRecurse(), toAPValue(), and clang::interp::MemberPointer::toPointer().
|
inline |
Returns the total size of the innermost field.
Definition at line 381 of file Pointer.h.
References getFieldDesc(), clang::interp::Descriptor::getSize(), and isBlockPointer().
Referenced by atIndex(), expand(), getNumElems(), and isOnePastEnd().
|
inline |
Returns the expression or declaration the pointer has been created for.
Definition at line 305 of file Pointer.h.
References Fn, clang::interp::Function::getDecl(), getDeclDesc(), clang::interp::Descriptor::getSource(), Int, isBlockPointer(), isFunctionPointer(), and isIntegralPointer().
|
inline |
Returns the type of the innermost field.
Definition at line 346 of file Pointer.h.
References BS, Fn, clang::interp::Descriptor::getDataElemType(), getFieldDesc(), getType(), inPrimitiveArray(), isFunctionPointer(), isTypeidPointer(), and Typeid.
Referenced by clang::interp::CheckBCPResult(), clang::interp::CheckConst(), clang::interp::CheckDowncast(), clang::interp::EvaluationResult::checkFullyInitialized(), clang::interp::EvaluationResult::checkReturnValue(), clang::interp::CheckVolatile(), clang::interp::DoBitCastPtr(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::Free(), clang::interp::GetDynamicDecl(), getType(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_memcmp(), clang::interp::interp__builtin_memcpy(), clang::interp::SetThreeWayComparisonField(), clang::interp::SubPtr(), and toDiagnosticString().
Checks if two pointers can be subtracted.
Definition at line 716 of file Pointer.cpp.
References clang::interp::BlockPointer::Base, BS, getFieldDesc(), hasSameBase(), clang::interp::Descriptor::IsArray, and Pointer().
Checks if two pointers are comparable.
Definition at line 692 of file Pointer.cpp.
References asBlockPointer(), isFunctionPointer(), isIntegralPointer(), isTypeidPointer(), isZero(), clang::interp::BlockPointer::Pointee, and Pointer().
Referenced by clang::interp::CmpHelper< Pointer >(), clang::interp::CmpHelperEQ< Pointer >(), compare(), hasSameArray(), and clang::interp::SubPtr().
|
inline |
Checks if the innermost field is an array.
Definition at line 408 of file Pointer.h.
References getFieldDesc(), clang::interp::Descriptor::IsArray, and isBlockPointer().
Referenced by endLifetime(), clang::interp::evaluateBuiltinObjectSize(), getLifetime(), isArrayElement(), isArrayRoot(), narrow(), clang::interp::OffsetHelper(), and startLifetime().
| void Pointer::initialize | ( | ) | const |
Initializes a field.
Definition at line 546 of file Pointer.cpp.
References BS, getFieldDesc(), getIndex(), clang::interp::Descriptor::getNumElems(), clang::interp::Initialized, initializeElement(), clang::interp::GlobalInlineDescriptor::InitState, isBlockPointer(), clang::interp::Descriptor::isPrimitiveArray(), and isRoot().
Referenced by clang::interp::copyComposite(), clang::interp::copyRecord(), clang::interp::DoBitCastPtr(), enumerateData(), clang::interp::FinishInit(), clang::interp::FinishInitActivate(), clang::interp::FinishInitActivatePop(), clang::interp::FinishInitGlobal(), clang::interp::FinishInitPop(), clang::interp::Init(), clang::interp::InitGlobal(), clang::interp::InitGlobalTemp(), clang::interp::InitPop(), clang::interp::interp__builtin_carryop(), clang::interp::interp__builtin_elementwise_countzeroes(), clang::interp::interp__builtin_overflowop(), clang::interp::SetField(), clang::interp::SetThreeWayComparisonField(), clang::interp::Store(), clang::interp::StoreBitField(), clang::interp::StoreBitFieldPop(), and clang::interp::StorePop().
| void Pointer::initializeAllElements | ( | ) | const |
Initialize all elements of a primitive array at once.
This can be used in situations where we know we have initialized all elements of a primtive array.
Definition at line 593 of file Pointer.cpp.
References getFieldDesc(), and isArrayRoot().
Referenced by clang::interp::Program::createGlobalString(), clang::interp::interp__builtin_elementwise_abs(), clang::interp::interp__builtin_elementwise_fp_binop(), clang::interp::interp__builtin_elementwise_int_binop(), clang::interp::interp__builtin_elementwise_int_unaryop(), clang::interp::interp__builtin_elementwise_triop(), clang::interp::interp__builtin_elementwise_triop_fp(), clang::interp::interp__builtin_ia32_cvt_mask2vec(), clang::interp::interp__builtin_ia32_cvtpd2ps(), clang::interp::interp__builtin_ia32_cvtsd2ss(), clang::interp::interp__builtin_ia32_multishiftqb(), clang::interp::interp__builtin_ia32_shift_with_count(), clang::interp::interp__builtin_ia32_shuffle_generic(), clang::interp::interp__builtin_ia32_vpconflict(), clang::interp::interp__builtin_select(), clang::interp::interp__builtin_select_scalar(), clang::interp::interp__builtin_vec_set(), clang::interp::interp__builtin_x86_extract_vector(), clang::interp::interp__builtin_x86_extract_vector_masked(), and clang::interp::interp__builtin_x86_insert_subvector().
| void Pointer::initializeElement | ( | unsigned | Index | ) | const |
Initialized the given element of a primitive array.
Definition at line 572 of file Pointer.cpp.
References clang::interp::InitMapPtr::allInitialized(), BS, getFieldDesc(), clang::interp::Descriptor::getNumElems(), getNumElems(), clang::interp::InitMapPtr::hasInitMap(), clang::interp::InitMap::initializeElement(), isStatic(), clang::interp::InitMapPtr::noteAllInitialized(), and clang::interp::InitMapPtr::setInitMap().
Referenced by clang::interp::CopyArray(), and initialize().
|
inline |
Checks if the structure is a primitive array.
Definition at line 420 of file Pointer.h.
References getFieldDesc(), isBlockPointer(), and clang::interp::Descriptor::isPrimitiveArray().
|
inline |
Definition at line 413 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by activate(), clang::interp::CheckActive(), and clang::interp::CheckNewTypeMismatch().
|
inline |
Checks if the object is active.
Definition at line 551 of file Pointer.h.
References isBlockPointer(), and isRoot().
Referenced by clang::interp::CheckActive(), clang::interp::CheckFieldsInitialized(), clang::interp::CheckNewTypeMismatch(), clang::interp::copyRecord(), clang::interp::interp__builtin_is_within_lifetime(), and toRValue().
|
inline |
Checks if the pointer points to an array.
Definition at line 432 of file Pointer.h.
References clang::interp::BlockPointer::Base, BS, inArray(), and isBlockPointer().
Referenced by clang::interp::EvaluationResult::checkReturnValue(), computeOffsetForComparison(), clang::interp::computePointerOffset(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::Free(), clang::interp::operator<<(), clang::interp::pointsToLastObject(), and toAPValue().
|
inline |
Whether this array refers to an array, but not to the first element.
Definition at line 405 of file Pointer.h.
Referenced by allElementsAlive(), allElementsInitialized(), deref(), endLifetime(), getLifetime(), initializeAllElements(), startLifetime(), and toAPValue().
|
inline |
Checks if a structure is a base class.
Definition at line 557 of file Pointer.h.
References isField().
Referenced by computeOffsetForComparison(), clang::interp::computePointerOffset(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::pointsToLastObject(), and stripBaseCasts().
|
inline |
Definition at line 479 of file Pointer.h.
References clang::interp::Block.
Referenced by asBlockPointer(), atField(), canBeInitialized(), clang::interp::CheckConst(), clang::interp::CheckConstant(), clang::interp::CheckFinalLoad(), clang::interp::EvaluationResult::checkFullyInitialized(), clang::interp::CheckLoad(), clang::interp::CheckNewTypeMismatch(), clang::interp::CheckPointerToIntegralCast(), clang::interp::CheckStore(), clang::interp::CmpHelperEQ< Pointer >(), computeSplitPoint(), clang::interp::CopyArray(), deref(), clang::interp::DoBitCast(), clang::interp::DoBitCastPtr(), clang::interp::DoMemcpy(), clang::interp::DoMemcpy(), elem(), endLifetime(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::Context::evaluateString(), clang::interp::Context::evaluateStrlen(), expand(), clang::interp::ExpandPtr(), getDeclDesc(), getDeclID(), clang::interp::getField(), getIndex(), getLifetime(), getNumElems(), getOffset(), clang::interp::GetPtrBase(), clang::interp::GetPtrBasePop(), clang::interp::GetPtrDerivedPop(), getRawAddress(), getSize(), getSource(), inArray(), initialize(), inPrimitiveArray(), clang::interp::interp__builtin_assume_aligned(), clang::interp::interp__builtin_carryop(), clang::interp::interp__builtin_is_aligned_up_down(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_memcmp(), clang::interp::interp__builtin_overflowop(), clang::interp::interp__builtin_strcmp(), inUnion(), isActive(), isArrayElement(), clang::interp::isConstexprUnknown(), isConstInMutable(), isDereferencable(), isDummy(), isDynamic(), isElementInitialized(), isExtern(), isField(), isInitialized(), isLive(), isMutable(), isOnePastEnd(), clang::interp::isReadable(), isRoot(), isStatic(), isTemporary(), isUnknownSizeArray(), isVolatile(), isWeak(), clang::interp::Load(), clang::interp::LoadPop(), narrow(), clang::interp::OffsetHelper(), clang::interp::operator<<(), operator=(), operator=(), operator==(), pointsToLiteral(), pointsToStringLiteral(), pointToSameBlock(), startLifetime(), clang::interp::SubPtr(), and ~Pointer().
|
inline |
Checks if an object or a subfield is mutable.
Definition at line 572 of file Pointer.h.
References getDeclDesc(), clang::interp::Descriptor::IsConst, isIntegralPointer(), and isRoot().
Referenced by clang::interp::CheckConst(), clang::interp::CheckExtern(), clang::interp::CheckLoad(), clang::interp::Context::evaluateString(), and clang::interp::GetDynamicDecl().
|
inline |
Definition at line 577 of file Pointer.h.
References false, isBlockPointer(), and isRoot().
Referenced by clang::interp::CheckConst().
|
inline |
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.
Definition at line 721 of file Pointer.h.
References isBlockPointer(), and isPastEnd().
|
inline |
Checks if the pointer points to a dummy value.
Definition at line 562 of file Pointer.h.
References Block, BS, and isBlockPointer().
Referenced by clang::interp::Call(), clang::interp::CheckBCPResult(), clang::interp::CheckInvoke(), clang::interp::CheckPointerToIntegralCast(), clang::interp::CopyArray(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::Context::evaluateStrlen(), clang::interp::IncDecHelper(), clang::interp::IncDecPtrHelper(), clang::interp::interp__builtin_carryop(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_overflowop(), clang::interp::interp__builtin_strcmp(), clang::interp::isConstexprUnknown(), clang::interp::isReadable(), and toRValue().
|
inline |
Checks if the storage has been dynamically allocated.
Definition at line 520 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by clang::interp::CheckLive(), pointsToLiteral(), pointsToStringLiteral(), and toAPValue().
Definition at line 493 of file Pointer.cpp.
References clang::interp::InitMapPtr::allInitialized(), getFieldDesc(), clang::interp::InitMapPtr::hasInitMap(), and clang::interp::InitMap::isElementAlive().
Like isInitialized(), but for primitive arrays.
Definition at line 464 of file Pointer.cpp.
References clang::interp::InitMapPtr::allInitialized(), block(), BS, clang::interp::Block::getBlockDesc(), getFieldDesc(), clang::interp::InitMapPtr::hasInitMap(), clang::interp::Initialized, clang::interp::GlobalInlineDescriptor::InitState, isBlockPointer(), clang::interp::InitMap::isElementInitialized(), isInitialized(), clang::interp::Descriptor::isPrimitiveArray(), isRoot(), and isStatic().
Referenced by clang::interp::CheckArrayInitialized(), and isInitialized().
|
inline |
Checks if the pointer is an out-of-bounds element pointer.
Definition at line 666 of file Pointer.h.
Referenced by clang::interp::CheckRange(), expand(), clang::interp::interp__builtin_is_aligned_up_down(), print(), and clang::interp::SubPtr().
|
inline |
Checks if the storage is extern.
Definition at line 499 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by clang::interp::CheckExtern(), and clang::interp::DiagnoseUninitialized().
|
inline |
Checks if the item is a field in an object.
Definition at line 284 of file Pointer.h.
References clang::interp::Descriptor::asDecl(), getFieldDesc(), isBlockPointer(), and isRoot().
Referenced by clang::interp::CheckLive(), clang::interp::CheckLoad(), clang::interp::computePointerOffset(), isBaseClass(), isVirtualBaseClass(), and toAPValue().
|
inline |
Definition at line 481 of file Pointer.h.
References clang::interp::Fn.
Referenced by asFunctionPointer(), atIndex(), clang::interp::CallPtr(), clang::interp::CheckBCPResult(), clang::interp::CheckPointerToIntegralCast(), clang::interp::CmpHelper< Pointer >(), clang::interp::CmpHelperEQ< Pointer >(), getDeclDesc(), getIntegerRepresentation(), getSource(), getType(), hasSameBase(), isWeak(), isZeroSizeArray(), clang::interp::OffsetHelper(), operator==(), and toAPValue().
| bool Pointer::isInitialized | ( | ) | const |
Checks if an object was initialized.
Definition at line 442 of file Pointer.cpp.
References asBlockPointer(), block(), BS, clang::interp::Block::getBlockDesc(), getFieldDesc(), getIndex(), clang::interp::Initialized, clang::interp::GlobalInlineDescriptor::InitState, isBlockPointer(), isElementInitialized(), clang::interp::Descriptor::isPrimitiveArray(), and isRoot().
Referenced by clang::interp::CheckExtern(), clang::interp::CheckFieldsInitialized(), clang::interp::CheckFinalLoad(), clang::interp::CheckLoad(), clang::interp::copyRecord(), clang::interp::DecPtr(), clang::interp::DiagnoseUninitialized(), clang::interp::Program::dump(), clang::interp::IncPtr(), isElementInitialized(), clang::interp::Program::isGlobalInitialized(), and clang::interp::readPointerToBuffer().
|
inline |
Definition at line 480 of file Pointer.h.
References clang::interp::Int.
Referenced by asIntPointer(), atIndex(), clang::interp::CheckBCPResult(), elemSize(), getByteOffset(), getDeclDesc(), clang::interp::getField(), getFieldDesc(), getIntegerRepresentation(), clang::interp::GetPtrBase(), clang::interp::GetPtrBasePop(), getSource(), hasSameBase(), clang::interp::interp__builtin_atomic_lock_free(), clang::interp::interp__builtin_memcpy(), isConst(), isPastEnd(), clang::interp::OffsetHelper(), operator==(), toAPValue(), toDiagnosticString(), and toRValue().
|
inline |
Checks if the pointer is live.
Definition at line 278 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by clang::interp::CheckConst(), clang::interp::EvaluationResult::checkFullyInitialized(), clang::interp::CheckLive(), clang::interp::CheckMutable(), clang::interp::CheckVolatile(), clang::interp::copyComposite(), deref(), clang::interp::DiagnoseUninitialized(), clang::interp::DoBitCast(), clang::interp::DoBitCastPtr(), elem(), clang::interp::isReadable(), clang::interp::operator<<(), and toRValue().
|
inline |
Checks if the field is mutable.
Definition at line 531 of file Pointer.h.
References isBlockPointer(), and isRoot().
Referenced by clang::interp::CheckConst(), and clang::interp::CheckMutable().
|
inline |
Checks if the index is one past end.
Definition at line 644 of file Pointer.h.
References BS, getOffset(), getSize(), isBlockPointer(), isPastEnd(), and isUnknownSizeArray().
Referenced by clang::interp::arePotentiallyOverlappingStringLiterals(), clang::interp::CheckRange(), clang::interp::CheckSubobject(), clang::interp::CmpHelperEQ< Pointer >(), computeOffsetForComparison(), clang::interp::computePointerOffset(), clang::interp::Free(), getByteOffset(), clang::interp::interp__builtin_is_within_lifetime(), clang::interp::isReadable(), narrow(), clang::interp::OffsetHelper(), clang::interp::operator<<(), and toAPValue().
|
inline |
Checks if the pointer points past the end of the object.
Definition at line 658 of file Pointer.h.
References BS, isIntegralPointer(), and isZero().
Referenced by clang::interp::CheckExtern(), clang::interp::Context::evaluateStrlen(), isDereferencable(), isOnePastEnd(), and toRValue().
|
inline |
Pointer points directly to a block.
Definition at line 448 of file Pointer.h.
References BS, isBlockPointer(), and isZero().
Referenced by activate(), allElementsAlive(), allElementsInitialized(), clang::interp::ArrayDecay(), clang::interp::CheckActive(), clang::interp::EvaluationResult::checkReturnValue(), clang::interp::CheckVolatile(), computeOffsetForComparison(), computeSplitPoint(), expand(), clang::interp::Free(), getFieldDesc(), initialize(), isActive(), isConst(), isConstInMutable(), isElementInitialized(), isField(), isInitialized(), isMutable(), isVolatile(), clang::interp::pointsToLastObject(), and print().
|
inline |
Checks if the storage is static.
Definition at line 505 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by allElementsAlive(), allElementsInitialized(), clang::interp::CheckConstant(), CheckGlobal(), clang::interp::GetDynamicDecl(), initializeElement(), isElementInitialized(), and isStaticTemporary().
|
inline |
Checks if the storage is a static temporary.
Definition at line 528 of file Pointer.h.
References isStatic(), and isTemporary().
|
inline |
Checks if the storage is temporary.
Definition at line 512 of file Pointer.h.
References BS, and isBlockPointer().
Referenced by clang::interp::CheckDeleteSource(), clang::interp::CheckLive(), and isStaticTemporary().
|
inline |
Definition at line 482 of file Pointer.h.
References clang::interp::Typeid.
Referenced by asTypeidPointer(), clang::interp::CheckBCPResult(), clang::interp::CmpHelper< Pointer >(), getByteOffset(), getDeclDesc(), getType(), hasSameBase(), and toAPValue().
|
inline |
Checks if the structure is an array of unknown size.
Definition at line 426 of file Pointer.h.
References getFieldDesc(), isBlockPointer(), and clang::interp::Descriptor::isUnknownSizeArray().
Referenced by clang::interp::ArrayDecay(), clang::interp::CheckArray(), clang::interp::CmpHelperEQ< Pointer >(), clang::interp::Context::evaluateStrlen(), clang::interp::interp__builtin_memcpy(), isOnePastEnd(), narrow(), and toAPValue().
|
inline |
Definition at line 558 of file Pointer.h.
References isField().
Referenced by computeOffsetForComparison(), clang::interp::computePointerOffset(), and toAPValue().
|
inline |
Checks if an object or a subfield is volatile.
Definition at line 584 of file Pointer.h.
References getDeclDesc(), isBlockPointer(), isRoot(), and clang::interp::Descriptor::IsVolatile.
Referenced by clang::interp::CheckVolatile().
|
inline |
Definition at line 537 of file Pointer.h.
References BS, Fn, isBlockPointer(), and isFunctionPointer().
|
inline |
Checks if the pointer is null.
Definition at line 264 of file Pointer.h.
References clang::interp::Block, BS, Fn, clang::interp::Fn, Int, clang::interp::Int, and clang::interp::Typeid.
Referenced by clang::interp::ArrayDecay(), clang::interp::Call(), clang::interp::CallPtr(), clang::interp::CheckBCPResult(), clang::interp::CheckFinalLoad(), clang::interp::EvaluationResult::checkFullyInitialized(), clang::interp::CheckLive(), clang::interp::CheckLoad(), clang::interp::CheckNewTypeMismatch(), clang::interp::CheckNonNullArgs(), clang::interp::CheckNull(), clang::interp::CheckPointerToIntegralCast(), clang::interp::CheckStore(), clang::interp::CmpHelperEQ< Pointer >(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::Free(), getIndex(), hasSameBase(), clang::interp::interp__builtin_atomic_lock_free(), clang::interp::interp__builtin_is_within_lifetime(), clang::interp::interp__builtin_memchr(), clang::interp::interp__builtin_memcpy(), clang::interp::interp__builtin_operator_delete(), isPastEnd(), isRoot(), narrow(), pointsToLiteral(), pointsToStringLiteral(), clang::interp::MemberPointer::takeInstance(), toAPValue(), toDiagnosticString(), and toRValue().
|
inline |
Checks if the pointer is pointing to a zero-size array.
Definition at line 669 of file Pointer.h.
References getFieldDesc(), and isFunctionPointer().
Referenced by clang::interp::ArrayDecay(), clang::interp::CheckRange(), clang::interp::CheckRange(), clang::interp::Free(), and toAPValue().
|
inlinenodiscard |
Restricts the scope of an array element pointer.
Definition at line 194 of file Pointer.h.
References BS, inArray(), inPrimitiveArray(), isBlockPointer(), isOnePastEnd(), isUnknownSizeArray(), isZero(), and Pointer().
Referenced by clang::interp::CheckArrayInitialized(), clang::interp::collectBlocks(), clang::interp::copyComposite(), clang::interp::endLifetimeRecurse(), enumerateData(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::finishGlobalRecurse(), clang::interp::NarrowPtr(), clang::interp::RunDestructors(), clang::interp::startLifetimeRecurse(), and clang::interp::zeroAll().
Definition at line 94 of file Pointer.cpp.
References clang::interp::BlockPointer::Base, Block, clang::interp::Block, block(), BS, Fn, clang::interp::Fn, Int, clang::interp::Int, isBlockPointer(), Pointer(), Typeid, and clang::interp::Typeid.
Definition at line 133 of file Pointer.cpp.
References Block, clang::interp::Block, BS, Fn, clang::interp::Fn, Int, clang::interp::Int, isBlockPointer(), Pointer(), Typeid, and clang::interp::Typeid.
Equality operators are just for tests.
Definition at line 126 of file Pointer.h.
References clang::interp::BlockPointer::Base, BS, clang::interp::IntPointer::Desc, Fn, clang::interp::FunctionPointer::Func, Int, isBlockPointer(), isFunctionPointer(), isIntegralPointer(), clang::interp::BlockPointer::Pointee, Pointer(), and clang::interp::IntPointer::Value.
| bool Pointer::pointsToLiteral | ( | ) | const |
Whether this points to a block that's been created for a "literal lvalue", i.e.
a non-MaterializeTemporaryExpr Expr.
Definition at line 721 of file Pointer.cpp.
References clang::interp::Descriptor::asExpr(), block(), clang::interp::Block::getDescriptor(), clang::isa(), isBlockPointer(), isDynamic(), and isZero().
| bool Pointer::pointsToStringLiteral | ( | ) | const |
Definition at line 732 of file Pointer.cpp.
References clang::interp::Descriptor::asExpr(), block(), clang::interp::Block::getDescriptor(), isBlockPointer(), isDynamic(), and isZero().
Referenced by clang::interp::CmpHelperEQ< Pointer >().
Checks if both given pointers point to the same block.
Definition at line 710 of file Pointer.cpp.
References block(), isBlockPointer(), and Pointer().
Referenced by clang::interp::interp__builtin_memcpy(), and clang::interp::runRecordDestructor().
| void Pointer::print | ( | llvm::raw_ostream & | OS | ) | const |
Prints the pointer.
Definition at line 326 of file Pointer.cpp.
References asTypeidPointer(), Block, clang::interp::Block, BS, Fn, clang::interp::Fn, clang::interp::Block::getSize(), Int, clang::interp::Int, isElementPastEnd(), isRoot(), clang::interp::Typeid, clang::interp::TypeidPointer::TypeInfoType, and clang::interp::TypeidPointer::TypePtr.
Referenced by clang::interp::operator<<().
| void Pointer::startLifetime | ( | ) | const |
Start the lifetime of this pointer.
This works for pointer with an InlineDescriptor as well as primitive array elements. Pointers are usually alive by default, unless the underlying object has been allocated with std::allocator. This function is used by std::construct_at.
Definition at line 506 of file Pointer.cpp.
References clang::interp::InitMapPtr::allInitialized(), BS, getFieldDesc(), getIndex(), getLifetime(), clang::interp::Descriptor::getNumElems(), clang::interp::InitMapPtr::hasInitMap(), inArray(), isArrayRoot(), isBlockPointer(), clang::interp::InitMapPtr::setInitMap(), clang::interp::Started, and clang::interp::InitMap::startElementLifetime().
Referenced by clang::interp::startLifetimeRecurse().
|
inlinenodiscard |
Strip base casts from this Pointer.
The result is either a root pointer or something that isn't a base class anymore.
Definition at line 786 of file Pointer.h.
References getBase(), isBaseClass(), and Pointer().
Referenced by clang::interp::CallVirt(), clang::interp::evaluateBuiltinObjectSize(), clang::interp::Free(), clang::interp::GetDynamicDecl(), clang::interp::interp__builtin_memcpy(), and clang::interp::VirtBaseHelper().
| APValue Pointer::toAPValue | ( | const ASTContext & | ASTCtx | ) | const |
Converts the pointer to an APValue.
Definition at line 172 of file Pointer.cpp.
References clang::APValue, clang::APValue::LValuePathEntry::ArrayIndex(), clang::interp::Descriptor::asDecl(), clang::interp::Descriptor::asExpr(), asFunctionPointer(), asIntPointer(), clang::interp::Descriptor::asValueDecl(), block(), clang::cast(), expand(), clang::CharUnits::fromQuantity(), clang::interp::FunctionPointer::Func, getArray(), clang::Type::getAsRecordDecl(), clang::ASTContext::getASTRecordLayout(), getBase(), clang::ASTRecordLayout::getBaseClassOffset(), clang::interp::Descriptor::getDataType(), clang::interp::Function::getDecl(), clang::interp::Record::getDecl(), getDeclDesc(), getDeclPtr(), clang::RecordDecl::getDefinition(), clang::APValue::LValueBase::getDynamicAlloc(), clang::interp::Descriptor::getElemQualType(), clang::interp::Function::getExpr(), getFieldDesc(), clang::ASTRecordLayout::getFieldOffset(), getFieldOffset(), getIndex(), getNumElems(), getRecord(), clang::interp::Descriptor::getType(), clang::APValue::LValueBase::getTypeInfo(), clang::ASTContext::getTypeSizeInChars(), clang::ASTRecordLayout::getVBaseClassOffset(), clang::interp::Descriptor::IsArray, isArrayElement(), isArrayRoot(), isDynamic(), isField(), isFunctionPointer(), isIntegralPointer(), isOnePastEnd(), isTypeidPointer(), isUnknownSizeArray(), isVirtualBaseClass(), isZero(), isZeroSizeArray(), Pointer(), clang::ASTContext::toCharUnitsFromBits(), Typeid, and clang::CharUnits::Zero().
Referenced by clang::interp::GetDynamicDecl(), clang::interp::interp__builtin_assume_aligned(), toDiagnosticString(), and toRValue().
| std::string Pointer::toDiagnosticString | ( | const ASTContext & | Ctx | ) | const |
Converts the pointer to a string usable in diagnostics.
Definition at line 432 of file Pointer.cpp.
References asIntPointer(), clang::APValue::getAsString(), getType(), isIntegralPointer(), isZero(), and toAPValue().
Referenced by clang::interp::CheckDeleteSource(), clang::interp::CmpHelper< Pointer >(), clang::interp::CmpHelperEQ< Pointer >(), clang::interp::Destroy(), clang::interp::Free(), clang::interp::getField(), clang::interp::interp__builtin_memcpy(), clang::interp::interp__builtin_operator_delete(), and clang::interp::SubPtr().
Converts the pointer to an APValue that is an rvalue.
Definition at line 785 of file Pointer.cpp.
References clang::APValue, clang::interp::Descriptor::asFieldDecl(), bool, clang::interp::Context::canClassify(), canDeref(), clang::interp::Context::classify(), deref(), clang::interp::Record::fields(), std::function, clang::interp::Floating::getAPFloat(), clang::interp::Context::getASTContext(), clang::interp::Record::getBase(), clang::ASTContext::getCanonicalTagType(), clang::interp::Record::getField(), getFieldDesc(), clang::interp::Record::getNumBases(), clang::interp::Record::getNumFields(), clang::interp::Record::getNumVirtualBases(), clang::interp::Descriptor::getPrimType(), clang::interp::Record::getVirtualBase(), INT_TYPE_SWITCH, isActive(), isDummy(), clang::Type::isFunctionType(), clang::interp::isIntegerOrBoolType(), isIntegralPointer(), isLive(), clang::QualType::isNull(), isPastEnd(), clang::interp::Descriptor::isPrimitive(), clang::interp::Descriptor::isPrimitiveArray(), isZero(), Ok, Pointer(), clang::interp::PT_Float, clang::Result, toAPValue(), and TYPE_SWITCH.
|
friend |
Definition at line 830 of file Pointer.h.
References Block.
Referenced by Block, block(), expand(), isDummy(), operator=(), operator=(), Pointer(), Pointer(), Pointer(), print(), and ~Pointer().
|
friend |
|
friend |
Definition at line 834 of file Pointer.h.
References DynamicAllocator.
Referenced by DynamicAllocator.
|
friend |
|
friend |
|
friend |
| BlockPointer clang::interp::Pointer::BS |
Definition at line 869 of file Pointer.h.
Referenced by activate(), allElementsAlive(), allElementsInitialized(), asBlockPointer(), atField(), atFieldSub(), atIndex(), block(), canBeInitialized(), clang::interp::DynamicAllocator::cleanup(), clang::interp::DeadBlock::DeadBlock(), deref(), elem(), elemSize(), endLifetime(), expand(), getArray(), getBase(), getDeclDesc(), getDeclID(), getDeclPtr(), getIndex(), getIntegerRepresentation(), getLifetime(), getOffset(), getRawAddress(), getType(), hasSameArray(), initialize(), initializeElement(), inUnion(), isArrayElement(), isArrayRoot(), isDummy(), isDynamic(), isElementInitialized(), isExtern(), isInitialized(), isLive(), isOnePastEnd(), isPastEnd(), isRoot(), isStatic(), isTemporary(), isWeak(), isZero(), clang::interp::Block::movePointersTo(), narrow(), operator=(), operator=(), operator==(), Pointer(), Pointer(), Pointer(), print(), Program, startLifetime(), and ~Pointer().
| FunctionPointer clang::interp::Pointer::Fn |
Definition at line 870 of file Pointer.h.
Referenced by asFunctionPointer(), atIndex(), getIntegerRepresentation(), getSource(), getType(), isWeak(), isZero(), operator=(), operator=(), operator==(), Pointer(), Pointer(), Pointer(), and print().
| IntPointer clang::interp::Pointer::Int |
Definition at line 868 of file Pointer.h.
Referenced by asIntPointer(), atIndex(), computeOffsetForComparison(), elemSize(), getByteOffset(), getDeclDesc(), getFieldDesc(), getIntegerRepresentation(), getSource(), isZero(), operator=(), operator=(), operator==(), Pointer(), Pointer(), Pointer(), Pointer(), Pointer(), and print().
| TypeidPointer clang::interp::Pointer::Typeid |
Definition at line 871 of file Pointer.h.
Referenced by asTypeidPointer(), getByteOffset(), getType(), operator=(), operator=(), Pointer(), Pointer(), Pointer(), and toAPValue().