Lines Matching full:state
57 void printState(raw_ostream &Out, ProgramStateRef State, const char *NL,
64 void checkLiveSymbols(ProgramStateRef State, SymbolReaper &SR) const;
105 bool hasSubscriptOperator(ProgramStateRef State, const MemRegion *Reg);
106 bool frontModifiable(ProgramStateRef State, const MemRegion *Reg);
107 bool backModifiable(ProgramStateRef State, const MemRegion *Reg);
108 SymbolRef getContainerBegin(ProgramStateRef State, const MemRegion *Cont);
109 SymbolRef getContainerEnd(ProgramStateRef State, const MemRegion *Cont);
110 ProgramStateRef createContainerBegin(ProgramStateRef State,
114 ProgramStateRef createContainerEnd(ProgramStateRef State, const MemRegion *Cont,
118 ProgramStateRef setContainerData(ProgramStateRef State, const MemRegion *Cont,
120 ProgramStateRef invalidateAllIteratorPositions(ProgramStateRef State,
123 invalidateAllIteratorPositionsExcept(ProgramStateRef State,
126 ProgramStateRef invalidateIteratorPositions(ProgramStateRef State,
129 ProgramStateRef invalidateIteratorPositions(ProgramStateRef State,
134 ProgramStateRef reassignAllIteratorPositions(ProgramStateRef State,
137 ProgramStateRef reassignAllIteratorPositionsUnless(ProgramStateRef State,
143 ProgramStateRef State, SValBuilder &SVB, SymbolRef OldSym,
145 SymbolRef rebaseSymbol(ProgramStateRef State, SValBuilder &SVB, SymbolRef Expr,
147 bool hasLiveIterators(ProgramStateRef State, const MemRegion *Cont);
212 void ContainerModeling::checkLiveSymbols(ProgramStateRef State, in checkLiveSymbols() argument
215 auto ContMap = State->get<ContainerMap>(); in checkLiveSymbols()
234 auto State = C.getState(); in checkDeadSymbols() local
236 auto ContMap = State->get<ContainerMap>(); in checkDeadSymbols()
241 if (!hasLiveIterators(State, Cont.first)) { in checkDeadSymbols()
242 State = State->remove<ContainerMap>(Cont.first); in checkDeadSymbols()
247 C.addTransition(State); in checkDeadSymbols()
260 auto State = C.getState(); in handleBegin() local
261 auto BeginSym = getContainerBegin(State, ContReg); in handleBegin()
263 State = createContainerBegin(State, ContReg, CE, C.getASTContext().LongTy, in handleBegin()
265 BeginSym = getContainerBegin(State, ContReg); in handleBegin()
267 State = setIteratorPosition(State, RetVal, in handleBegin()
269 C.addTransition(State); in handleBegin()
282 auto State = C.getState(); in handleEnd() local
283 auto EndSym = getContainerEnd(State, ContReg); in handleEnd()
285 State = createContainerEnd(State, ContReg, CE, C.getASTContext().LongTy, in handleEnd()
287 EndSym = getContainerEnd(State, ContReg); in handleEnd()
289 State = setIteratorPosition(State, RetVal, in handleEnd()
291 C.addTransition(State); in handleEnd()
304 auto State = C.getState(); in handleAssignment() local
305 const auto CData = getContainerData(State, ContReg); in handleAssignment()
307 State = invalidateAllIteratorPositions(State, ContReg); in handleAssignment()
316 const auto OldCData = getContainerData(State, OldContReg); in handleAssignment()
323 State = reassignAllIteratorPositionsUnless(State, OldContReg, ContReg, in handleAssignment()
331 State = assumeNoOverflow(State, NewEndSym, 4); in handleAssignment()
333 State = setContainerData(State, ContReg, CData->newEnd(NewEndSym)); in handleAssignment()
335 State = setContainerData(State, ContReg, in handleAssignment()
340 State = rebaseSymbolInIteratorPositionsIf( in handleAssignment()
341 State, SVB, OldEndSym, NewEndSym, OldEndSym, BO_LT); in handleAssignment()
345 State = reassignAllIteratorPositions(State, OldContReg, ContReg); in handleAssignment()
351 State = in handleAssignment()
352 setContainerData(State, ContReg, CData->newBegin(OldBeginSym)); in handleAssignment()
354 State = setContainerData(State, ContReg, in handleAssignment()
357 State = in handleAssignment()
358 setContainerData(State, OldContReg, OldCData->newBegin(nullptr)); in handleAssignment()
363 State = reassignAllIteratorPositions(State, OldContReg, ContReg); in handleAssignment()
367 C.addTransition(State); in handleAssignment()
379 auto State = C.getState(); in handleAssign() local
380 State = invalidateAllIteratorPositions(State, ContReg); in handleAssign()
381 C.addTransition(State); in handleAssign()
394 auto State = C.getState(); in handleClear() local
395 if (!hasSubscriptOperator(State, ContReg) || in handleClear()
396 !backModifiable(State, ContReg)) { in handleClear()
397 const auto CData = getContainerData(State, ContReg); in handleClear()
400 State = in handleClear()
401 invalidateAllIteratorPositionsExcept(State, ContReg, EndSym, BO_GE); in handleClear()
402 C.addTransition(State); in handleClear()
409 State = invalidateAllIteratorPositions(State, ContReg); in handleClear()
410 C.addTransition(State, ChangeTag); in handleClear()
422 auto State = C.getState(); in handlePushBack() local
423 if (hasSubscriptOperator(State, ContReg) && frontModifiable(State, ContReg)) { in handlePushBack()
424 State = invalidateAllIteratorPositions(State, ContReg); in handlePushBack()
425 C.addTransition(State); in handlePushBack()
429 const auto CData = getContainerData(State, ContReg); in handlePushBack()
435 if (hasSubscriptOperator(State, ContReg)) { in handlePushBack()
436 State = invalidateIteratorPositions(State, EndSym, BO_GE); in handlePushBack()
442 SVB.evalBinOp(State, BO_Add, in handlePushBack()
448 State = setContainerData(State, ContReg, CData->newEnd(newEndSym)); in handlePushBack()
449 C.addTransition(State, ChangeTag); in handlePushBack()
461 auto State = C.getState(); in handlePopBack() local
462 const auto CData = getContainerData(State, ContReg); in handlePopBack()
471 SVB.evalBinOp(State, BO_Sub, in handlePopBack()
480 if (hasSubscriptOperator(State, ContReg) && in handlePopBack()
481 backModifiable(State, ContReg)) { in handlePopBack()
482 State = invalidateIteratorPositions(State, BackSym, BO_GE); in handlePopBack()
483 State = setContainerData(State, ContReg, CData->newEnd(nullptr)); in handlePopBack()
485 State = invalidateIteratorPositions(State, BackSym, BO_EQ); in handlePopBack()
488 State = setContainerData(State, ContReg, CData->newEnd(newEndSym)); in handlePopBack()
489 C.addTransition(State, ChangeTag); in handlePopBack()
502 auto State = C.getState(); in handlePushFront() local
503 if (hasSubscriptOperator(State, ContReg)) { in handlePushFront()
504 State = invalidateAllIteratorPositions(State, ContReg); in handlePushFront()
505 C.addTransition(State); in handlePushFront()
507 const auto CData = getContainerData(State, ContReg); in handlePushFront()
516 SVB.evalBinOp(State, BO_Sub, in handlePushFront()
522 State = setContainerData(State, ContReg, CData->newBegin(newBeginSym)); in handlePushFront()
523 C.addTransition(State, ChangeTag); in handlePushFront()
536 auto State = C.getState(); in handlePopFront() local
537 const auto CData = getContainerData(State, ContReg); in handlePopFront()
544 if (hasSubscriptOperator(State, ContReg)) { in handlePopFront()
545 State = invalidateIteratorPositions(State, BeginSym, BO_LE); in handlePopFront()
547 State = invalidateIteratorPositions(State, BeginSym, BO_EQ); in handlePopFront()
553 SVB.evalBinOp(State, BO_Add, in handlePopFront()
559 State = setContainerData(State, ContReg, CData->newBegin(newBeginSym)); in handlePopFront()
560 C.addTransition(State, ChangeTag); in handlePopFront()
572 auto State = C.getState(); in handleInsert() local
573 const auto *Pos = getIteratorPosition(State, Iter); in handleInsert()
579 if (hasSubscriptOperator(State, ContReg) && backModifiable(State, ContReg)) { in handleInsert()
580 if (frontModifiable(State, ContReg)) { in handleInsert()
581 State = invalidateAllIteratorPositions(State, ContReg); in handleInsert()
583 State = invalidateIteratorPositions(State, Pos->getOffset(), BO_GE); in handleInsert()
585 if (const auto *CData = getContainerData(State, ContReg)) { in handleInsert()
587 State = invalidateIteratorPositions(State, EndSym, BO_GE); in handleInsert()
588 State = setContainerData(State, ContReg, CData->newEnd(nullptr)); in handleInsert()
591 C.addTransition(State); in handleInsert()
603 auto State = C.getState(); in handleErase() local
604 const auto *Pos = getIteratorPosition(State, Iter); in handleErase()
611 if (hasSubscriptOperator(State, ContReg) && backModifiable(State, ContReg)) { in handleErase()
612 if (frontModifiable(State, ContReg)) { in handleErase()
613 State = invalidateAllIteratorPositions(State, ContReg); in handleErase()
615 State = invalidateIteratorPositions(State, Pos->getOffset(), BO_GE); in handleErase()
617 if (const auto *CData = getContainerData(State, ContReg)) { in handleErase()
619 State = invalidateIteratorPositions(State, EndSym, BO_GE); in handleErase()
620 State = setContainerData(State, ContReg, CData->newEnd(nullptr)); in handleErase()
624 State = invalidateIteratorPositions(State, Pos->getOffset(), BO_EQ); in handleErase()
626 C.addTransition(State); in handleErase()
636 auto State = C.getState(); in handleErase() local
637 const auto *Pos1 = getIteratorPosition(State, Iter1); in handleErase()
638 const auto *Pos2 = getIteratorPosition(State, Iter2); in handleErase()
646 if (hasSubscriptOperator(State, ContReg) && backModifiable(State, ContReg)) { in handleErase()
647 if (frontModifiable(State, ContReg)) { in handleErase()
648 State = invalidateAllIteratorPositions(State, ContReg); in handleErase()
650 State = invalidateIteratorPositions(State, Pos1->getOffset(), BO_GE); in handleErase()
652 if (const auto *CData = getContainerData(State, ContReg)) { in handleErase()
654 State = invalidateIteratorPositions(State, EndSym, BO_GE); in handleErase()
655 State = setContainerData(State, ContReg, CData->newEnd(nullptr)); in handleErase()
659 State = invalidateIteratorPositions(State, Pos1->getOffset(), BO_GE, in handleErase()
662 C.addTransition(State); in handleErase()
667 auto State = C.getState(); in handleEraseAfter() local
668 const auto *Pos = getIteratorPosition(State, Iter); in handleEraseAfter()
678 SVB.evalBinOp(State, BO_Add, in handleEraseAfter()
682 State = invalidateIteratorPositions(State, NextSym, BO_EQ); in handleEraseAfter()
683 C.addTransition(State); in handleEraseAfter()
688 auto State = C.getState(); in handleEraseAfter() local
689 const auto *Pos1 = getIteratorPosition(State, Iter1); in handleEraseAfter()
690 const auto *Pos2 = getIteratorPosition(State, Iter2); in handleEraseAfter()
695 State = invalidateIteratorPositions(State, Pos1->getOffset(), BO_GT, in handleEraseAfter()
697 C.addTransition(State); in handleEraseAfter()
727 void ContainerModeling::printState(raw_ostream &Out, ProgramStateRef State, in printState() argument
729 auto ContMap = State->get<ContainerMap>(); in printState()
767 const CXXRecordDecl *getCXXRecordDecl(ProgramStateRef State, in getCXXRecordDecl() argument
769 auto TI = getDynamicTypeInfo(State, Reg); in getCXXRecordDecl()
785 bool hasSubscriptOperator(ProgramStateRef State, const MemRegion *Reg) { in hasSubscriptOperator() argument
786 const auto *CRD = getCXXRecordDecl(State, Reg); in hasSubscriptOperator()
801 bool frontModifiable(ProgramStateRef State, const MemRegion *Reg) { in frontModifiable() argument
802 const auto *CRD = getCXXRecordDecl(State, Reg); in frontModifiable()
816 bool backModifiable(ProgramStateRef State, const MemRegion *Reg) { in backModifiable() argument
817 const auto *CRD = getCXXRecordDecl(State, Reg); in backModifiable()
831 SymbolRef getContainerBegin(ProgramStateRef State, const MemRegion *Cont) { in getContainerBegin() argument
832 const auto *CDataPtr = getContainerData(State, Cont); in getContainerBegin()
839 SymbolRef getContainerEnd(ProgramStateRef State, const MemRegion *Cont) { in getContainerEnd() argument
840 const auto *CDataPtr = getContainerData(State, Cont); in getContainerEnd()
847 ProgramStateRef createContainerBegin(ProgramStateRef State, in createContainerBegin() argument
852 const auto *CDataPtr = getContainerData(State, Cont); in createContainerBegin()
854 return State; in createContainerBegin()
856 auto &SymMgr = State->getSymbolManager(); in createContainerBegin()
859 State = assumeNoOverflow(State, Sym, 4); in createContainerBegin()
863 return setContainerData(State, Cont, CData); in createContainerBegin()
867 return setContainerData(State, Cont, CData); in createContainerBegin()
870 ProgramStateRef createContainerEnd(ProgramStateRef State, const MemRegion *Cont, in createContainerEnd() argument
875 const auto *CDataPtr = getContainerData(State, Cont); in createContainerEnd()
877 return State; in createContainerEnd()
879 auto &SymMgr = State->getSymbolManager(); in createContainerEnd()
882 State = assumeNoOverflow(State, Sym, 4); in createContainerEnd()
886 return setContainerData(State, Cont, CData); in createContainerEnd()
890 return setContainerData(State, Cont, CData); in createContainerEnd()
893 ProgramStateRef setContainerData(ProgramStateRef State, const MemRegion *Cont, in setContainerData() argument
895 return State->set<ContainerMap>(Cont, CData); in setContainerData()
899 ProgramStateRef processIteratorPositions(ProgramStateRef State, Condition Cond, in processIteratorPositions() argument
901 auto &RegionMapFactory = State->get_context<IteratorRegionMap>(); in processIteratorPositions()
902 auto RegionMap = State->get<IteratorRegionMap>(); in processIteratorPositions()
912 State = State->set<IteratorRegionMap>(RegionMap); in processIteratorPositions()
914 auto &SymbolMapFactory = State->get_context<IteratorSymbolMap>(); in processIteratorPositions()
915 auto SymbolMap = State->get<IteratorSymbolMap>(); in processIteratorPositions()
925 State = State->set<IteratorSymbolMap>(SymbolMap); in processIteratorPositions()
927 return State; in processIteratorPositions()
930 ProgramStateRef invalidateAllIteratorPositions(ProgramStateRef State, in invalidateAllIteratorPositions() argument
938 return processIteratorPositions(State, MatchCont, Invalidate); in invalidateAllIteratorPositions()
942 invalidateAllIteratorPositionsExcept(ProgramStateRef State, in invalidateAllIteratorPositionsExcept() argument
947 !compare(State, Pos.getOffset(), Offset, Opc); in invalidateAllIteratorPositionsExcept()
952 return processIteratorPositions(State, MatchContAndCompare, Invalidate); in invalidateAllIteratorPositionsExcept()
955 ProgramStateRef invalidateIteratorPositions(ProgramStateRef State, in invalidateIteratorPositions() argument
959 return compare(State, Pos.getOffset(), Offset, Opc); in invalidateIteratorPositions()
964 return processIteratorPositions(State, Compare, Invalidate); in invalidateIteratorPositions()
967 ProgramStateRef invalidateIteratorPositions(ProgramStateRef State, in invalidateIteratorPositions() argument
973 return compare(State, Pos.getOffset(), Offset1, Opc1) && in invalidateIteratorPositions()
974 compare(State, Pos.getOffset(), Offset2, Opc2); in invalidateIteratorPositions()
979 return processIteratorPositions(State, Compare, Invalidate); in invalidateIteratorPositions()
982 ProgramStateRef reassignAllIteratorPositions(ProgramStateRef State, in reassignAllIteratorPositions() argument
991 return processIteratorPositions(State, MatchCont, ReAssign); in reassignAllIteratorPositions()
994 ProgramStateRef reassignAllIteratorPositionsUnless(ProgramStateRef State, in reassignAllIteratorPositionsUnless() argument
1001 !compare(State, Pos.getOffset(), Offset, Opc); in reassignAllIteratorPositionsUnless()
1006 return processIteratorPositions(State, MatchContAndCompare, ReAssign); in reassignAllIteratorPositionsUnless()
1013 ProgramStateRef State, SValBuilder &SVB, SymbolRef OldSym, in rebaseSymbolInIteratorPositionsIf() argument
1016 return compare(State, Pos.getOffset(), CondSym, Opc); in rebaseSymbolInIteratorPositionsIf()
1019 return Pos.setTo(rebaseSymbol(State, SVB, Pos.getOffset(), OldSym, in rebaseSymbolInIteratorPositionsIf()
1022 return processIteratorPositions(State, LessThanEnd, RebaseSymbol); in rebaseSymbolInIteratorPositionsIf()
1028 SymbolRef rebaseSymbol(ProgramStateRef State, SValBuilder &SVB, in rebaseSymbol() argument
1032 auto Diff = SVB.evalBinOpNN(State, BO_Sub, nonloc::SymbolVal(OrigExpr), in rebaseSymbol()
1040 return SVB.evalBinOpNN(State, BO_Add, *DiffInt, nonloc::SymbolVal(NewSym), in rebaseSymbol()
1044 bool hasLiveIterators(ProgramStateRef State, const MemRegion *Cont) { in hasLiveIterators() argument
1045 auto RegionMap = State->get<IteratorRegionMap>(); in hasLiveIterators()
1051 auto SymbolMap = State->get<IteratorSymbolMap>(); in hasLiveIterators()