29 const MemRegion *MR, SValBuilder &SVB) {
30 MR = MR->StripCasts();
32 if (
const DefinedOrUnknownSVal *Size = State->get<DynamicExtentMap>(MR))
35 return MR->getMemRegionManager().getStaticSize(MR, SVB);
39 return SVB.makeIntVal(SVB.getContext().getTypeSizeInChars(Ty).getQuantity(),
40 SVB.getArrayIndexType());
47 assert(MR !=
nullptr &&
"Not-null region expected");
48 MR = MR->StripCasts();
54 SVB.evalBinOp(State, BO_Div, Size, ElementSize, SVB.getArrayIndexType());
56 return ElementCount.castAs<DefinedOrUnknownSVal>();
60 SValBuilder &SvalBuilder = State->getStateManager().getSValBuilder();
61 const MemRegion *MRegion = BufV.getAsRegion();
64 RegionOffset
Offset = MRegion->getAsOffset();
65 if (
Offset.hasSymbolicOffset())
67 const MemRegion *BaseRegion = MRegion->getBaseRegion();
71 NonLoc OffsetInBytes = SvalBuilder.makeArrayIndex(
73 MRegion->getMemRegionManager().getContext().getCharWidth());
74 DefinedOrUnknownSVal ExtentInBytes =
77 return SvalBuilder.evalBinOp(State, BinaryOperator::Opcode::BO_Sub,
78 ExtentInBytes, OffsetInBytes,
79 SvalBuilder.getArrayIndexType());
83 DefinedOrUnknownSVal Size, SValBuilder &SVB) {
84 MR = MR->StripCasts();
89 return State->set<DynamicExtentMap>(MR->StripCasts(), Size);
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
#define REGISTER_MAP_WITH_PROGRAMSTATE(Name, Key, Value)
Declares an immutable map of type NameTy, suitable for placement into the ProgramState.
MemRegion - The root abstract class for all memory regions.
DefinedOrUnknownSVal getDynamicElementCount(ProgramStateRef State, const MemRegion *MR, SValBuilder &SVB, QualType Ty)
IntrusiveRefCntPtr< const ProgramState > ProgramStateRef
SVal getDynamicExtentWithOffset(ProgramStateRef State, SVal BufV)
Get the dynamic extent for a symbolic value that represents a buffer.
DefinedOrUnknownSVal getDynamicExtent(ProgramStateRef State, const MemRegion *MR, SValBuilder &SVB)
DefinedOrUnknownSVal getElementExtent(QualType Ty, SValBuilder &SVB)
ProgramStateRef setDynamicExtent(ProgramStateRef State, const MemRegion *MR, DefinedOrUnknownSVal Extent, SValBuilder &SVB)
Set the dynamic extent Extent of the region MR.