Lines Matching refs:State

57   void printState(raw_ostream &Out, ProgramStateRef State, const char *NL,
64 void checkLiveSymbols(ProgramStateRef State, SymbolReaper &SR) const;
100 bool hasSubscriptOperator(ProgramStateRef State, const MemRegion *Reg);
101 bool frontModifiable(ProgramStateRef State, const MemRegion *Reg);
102 bool backModifiable(ProgramStateRef State, const MemRegion *Reg);
103 SymbolRef getContainerBegin(ProgramStateRef State, const MemRegion *Cont);
104 SymbolRef getContainerEnd(ProgramStateRef State, const MemRegion *Cont);
105 ProgramStateRef createContainerBegin(ProgramStateRef State,
109 ProgramStateRef createContainerEnd(ProgramStateRef State, const MemRegion *Cont,
113 ProgramStateRef setContainerData(ProgramStateRef State, const MemRegion *Cont,
115 ProgramStateRef invalidateAllIteratorPositions(ProgramStateRef State,
118 invalidateAllIteratorPositionsExcept(ProgramStateRef State,
121 ProgramStateRef invalidateIteratorPositions(ProgramStateRef State,
124 ProgramStateRef invalidateIteratorPositions(ProgramStateRef State,
129 ProgramStateRef reassignAllIteratorPositions(ProgramStateRef State,
132 ProgramStateRef reassignAllIteratorPositionsUnless(ProgramStateRef State,
138 ProgramStateRef State, SValBuilder &SVB, SymbolRef OldSym,
140 SymbolRef rebaseSymbol(ProgramStateRef State, SValBuilder &SVB, SymbolRef Expr,
142 bool hasLiveIterators(ProgramStateRef State, const MemRegion *Cont);
207 void ContainerModeling::checkLiveSymbols(ProgramStateRef State, in checkLiveSymbols() argument
210 auto ContMap = State->get<ContainerMap>(); in checkLiveSymbols()
229 auto State = C.getState(); in checkDeadSymbols() local
231 auto ContMap = State->get<ContainerMap>(); in checkDeadSymbols()
236 if (!hasLiveIterators(State, Cont.first)) { in checkDeadSymbols()
237 State = State->remove<ContainerMap>(Cont.first); in checkDeadSymbols()
242 C.addTransition(State); in checkDeadSymbols()
255 auto State = C.getState(); in handleBegin() local
256 auto BeginSym = getContainerBegin(State, ContReg); in handleBegin()
258 State = createContainerBegin(State, ContReg, CE, C.getASTContext().LongTy, in handleBegin()
260 BeginSym = getContainerBegin(State, ContReg); in handleBegin()
262 State = setIteratorPosition(State, RetVal, in handleBegin()
264 C.addTransition(State); in handleBegin()
277 auto State = C.getState(); in handleEnd() local
278 auto EndSym = getContainerEnd(State, ContReg); in handleEnd()
280 State = createContainerEnd(State, ContReg, CE, C.getASTContext().LongTy, in handleEnd()
282 EndSym = getContainerEnd(State, ContReg); in handleEnd()
284 State = setIteratorPosition(State, RetVal, in handleEnd()
286 C.addTransition(State); in handleEnd()
299 auto State = C.getState(); in handleAssignment() local
300 const auto CData = getContainerData(State, ContReg); in handleAssignment()
302 State = invalidateAllIteratorPositions(State, ContReg); in handleAssignment()
311 const auto OldCData = getContainerData(State, OldContReg); in handleAssignment()
318 State = reassignAllIteratorPositionsUnless(State, OldContReg, ContReg, in handleAssignment()
326 State = assumeNoOverflow(State, NewEndSym, 4); in handleAssignment()
328 State = setContainerData(State, ContReg, CData->newEnd(NewEndSym)); in handleAssignment()
330 State = setContainerData(State, ContReg, in handleAssignment()
335 State = rebaseSymbolInIteratorPositionsIf( in handleAssignment()
336 State, SVB, OldEndSym, NewEndSym, OldEndSym, BO_LT); in handleAssignment()
340 State = reassignAllIteratorPositions(State, OldContReg, ContReg); in handleAssignment()
346 State = in handleAssignment()
347 setContainerData(State, ContReg, CData->newBegin(OldBeginSym)); in handleAssignment()
349 State = setContainerData(State, ContReg, in handleAssignment()
352 State = in handleAssignment()
353 setContainerData(State, OldContReg, OldCData->newBegin(nullptr)); in handleAssignment()
358 State = reassignAllIteratorPositions(State, OldContReg, ContReg); in handleAssignment()
362 C.addTransition(State); in handleAssignment()
374 auto State = C.getState(); in handleAssign() local
375 State = invalidateAllIteratorPositions(State, ContReg); in handleAssign()
376 C.addTransition(State); in handleAssign()
389 auto State = C.getState(); in handleClear() local
390 if (!hasSubscriptOperator(State, ContReg) || in handleClear()
391 !backModifiable(State, ContReg)) { in handleClear()
392 const auto CData = getContainerData(State, ContReg); in handleClear()
395 State = in handleClear()
396 invalidateAllIteratorPositionsExcept(State, ContReg, EndSym, BO_GE); in handleClear()
397 C.addTransition(State); in handleClear()
404 State = invalidateAllIteratorPositions(State, ContReg); in handleClear()
405 C.addTransition(State, ChangeTag); in handleClear()
417 auto State = C.getState(); in handlePushBack() local
418 if (hasSubscriptOperator(State, ContReg) && frontModifiable(State, ContReg)) { in handlePushBack()
419 State = invalidateAllIteratorPositions(State, ContReg); in handlePushBack()
420 C.addTransition(State); in handlePushBack()
424 const auto CData = getContainerData(State, ContReg); in handlePushBack()
430 if (hasSubscriptOperator(State, ContReg)) { in handlePushBack()
431 State = invalidateIteratorPositions(State, EndSym, BO_GE); in handlePushBack()
437 SVB.evalBinOp(State, BO_Add, in handlePushBack()
443 State = setContainerData(State, ContReg, CData->newEnd(newEndSym)); in handlePushBack()
444 C.addTransition(State, ChangeTag); in handlePushBack()
456 auto State = C.getState(); in handlePopBack() local
457 const auto CData = getContainerData(State, ContReg); in handlePopBack()
466 SVB.evalBinOp(State, BO_Sub, in handlePopBack()
475 if (hasSubscriptOperator(State, ContReg) && in handlePopBack()
476 backModifiable(State, ContReg)) { in handlePopBack()
477 State = invalidateIteratorPositions(State, BackSym, BO_GE); in handlePopBack()
478 State = setContainerData(State, ContReg, CData->newEnd(nullptr)); in handlePopBack()
480 State = invalidateIteratorPositions(State, BackSym, BO_EQ); in handlePopBack()
483 State = setContainerData(State, ContReg, CData->newEnd(newEndSym)); in handlePopBack()
484 C.addTransition(State, ChangeTag); in handlePopBack()
497 auto State = C.getState(); in handlePushFront() local
498 if (hasSubscriptOperator(State, ContReg)) { in handlePushFront()
499 State = invalidateAllIteratorPositions(State, ContReg); in handlePushFront()
500 C.addTransition(State); in handlePushFront()
502 const auto CData = getContainerData(State, ContReg); in handlePushFront()
511 SVB.evalBinOp(State, BO_Sub, in handlePushFront()
517 State = setContainerData(State, ContReg, CData->newBegin(newBeginSym)); in handlePushFront()
518 C.addTransition(State, ChangeTag); in handlePushFront()
531 auto State = C.getState(); in handlePopFront() local
532 const auto CData = getContainerData(State, ContReg); in handlePopFront()
539 if (hasSubscriptOperator(State, ContReg)) { in handlePopFront()
540 State = invalidateIteratorPositions(State, BeginSym, BO_LE); in handlePopFront()
542 State = invalidateIteratorPositions(State, BeginSym, BO_EQ); in handlePopFront()
548 SVB.evalBinOp(State, BO_Add, in handlePopFront()
554 State = setContainerData(State, ContReg, CData->newBegin(newBeginSym)); in handlePopFront()
555 C.addTransition(State, ChangeTag); in handlePopFront()
567 auto State = C.getState(); in handleInsert() local
568 const auto *Pos = getIteratorPosition(State, Iter); in handleInsert()
574 if (hasSubscriptOperator(State, ContReg) && backModifiable(State, ContReg)) { in handleInsert()
575 if (frontModifiable(State, ContReg)) { in handleInsert()
576 State = invalidateAllIteratorPositions(State, ContReg); in handleInsert()
578 State = invalidateIteratorPositions(State, Pos->getOffset(), BO_GE); in handleInsert()
580 if (const auto *CData = getContainerData(State, ContReg)) { in handleInsert()
582 State = invalidateIteratorPositions(State, EndSym, BO_GE); in handleInsert()
583 State = setContainerData(State, ContReg, CData->newEnd(nullptr)); in handleInsert()
586 C.addTransition(State); in handleInsert()
598 auto State = C.getState(); in handleErase() local
599 const auto *Pos = getIteratorPosition(State, Iter); in handleErase()
606 if (hasSubscriptOperator(State, ContReg) && backModifiable(State, ContReg)) { in handleErase()
607 if (frontModifiable(State, ContReg)) { in handleErase()
608 State = invalidateAllIteratorPositions(State, ContReg); in handleErase()
610 State = invalidateIteratorPositions(State, Pos->getOffset(), BO_GE); in handleErase()
612 if (const auto *CData = getContainerData(State, ContReg)) { in handleErase()
614 State = invalidateIteratorPositions(State, EndSym, BO_GE); in handleErase()
615 State = setContainerData(State, ContReg, CData->newEnd(nullptr)); in handleErase()
619 State = invalidateIteratorPositions(State, Pos->getOffset(), BO_EQ); in handleErase()
621 C.addTransition(State); in handleErase()
631 auto State = C.getState(); in handleErase() local
632 const auto *Pos1 = getIteratorPosition(State, Iter1); in handleErase()
633 const auto *Pos2 = getIteratorPosition(State, Iter2); in handleErase()
641 if (hasSubscriptOperator(State, ContReg) && backModifiable(State, ContReg)) { in handleErase()
642 if (frontModifiable(State, ContReg)) { in handleErase()
643 State = invalidateAllIteratorPositions(State, ContReg); in handleErase()
645 State = invalidateIteratorPositions(State, Pos1->getOffset(), BO_GE); in handleErase()
647 if (const auto *CData = getContainerData(State, ContReg)) { in handleErase()
649 State = invalidateIteratorPositions(State, EndSym, BO_GE); in handleErase()
650 State = setContainerData(State, ContReg, CData->newEnd(nullptr)); in handleErase()
654 State = invalidateIteratorPositions(State, Pos1->getOffset(), BO_GE, in handleErase()
657 C.addTransition(State); in handleErase()
662 auto State = C.getState(); in handleEraseAfter() local
663 const auto *Pos = getIteratorPosition(State, Iter); in handleEraseAfter()
673 SVB.evalBinOp(State, BO_Add, in handleEraseAfter()
677 State = invalidateIteratorPositions(State, NextSym, BO_EQ); in handleEraseAfter()
678 C.addTransition(State); in handleEraseAfter()
683 auto State = C.getState(); in handleEraseAfter() local
684 const auto *Pos1 = getIteratorPosition(State, Iter1); in handleEraseAfter()
685 const auto *Pos2 = getIteratorPosition(State, Iter2); in handleEraseAfter()
690 State = invalidateIteratorPositions(State, Pos1->getOffset(), BO_GT, in handleEraseAfter()
692 C.addTransition(State); in handleEraseAfter()
722 void ContainerModeling::printState(raw_ostream &Out, ProgramStateRef State, in printState() argument
724 auto ContMap = State->get<ContainerMap>(); in printState()
762 const CXXRecordDecl *getCXXRecordDecl(ProgramStateRef State, in getCXXRecordDecl() argument
764 auto TI = getDynamicTypeInfo(State, Reg); in getCXXRecordDecl()
776 bool hasSubscriptOperator(ProgramStateRef State, const MemRegion *Reg) { in hasSubscriptOperator() argument
777 const auto *CRD = getCXXRecordDecl(State, Reg); in hasSubscriptOperator()
792 bool frontModifiable(ProgramStateRef State, const MemRegion *Reg) { in frontModifiable() argument
793 const auto *CRD = getCXXRecordDecl(State, Reg); in frontModifiable()
807 bool backModifiable(ProgramStateRef State, const MemRegion *Reg) { in backModifiable() argument
808 const auto *CRD = getCXXRecordDecl(State, Reg); in backModifiable()
822 SymbolRef getContainerBegin(ProgramStateRef State, const MemRegion *Cont) { in getContainerBegin() argument
823 const auto *CDataPtr = getContainerData(State, Cont); in getContainerBegin()
830 SymbolRef getContainerEnd(ProgramStateRef State, const MemRegion *Cont) { in getContainerEnd() argument
831 const auto *CDataPtr = getContainerData(State, Cont); in getContainerEnd()
838 ProgramStateRef createContainerBegin(ProgramStateRef State, in createContainerBegin() argument
843 const auto *CDataPtr = getContainerData(State, Cont); in createContainerBegin()
845 return State; in createContainerBegin()
847 auto &SymMgr = State->getSymbolManager(); in createContainerBegin()
850 State = assumeNoOverflow(State, Sym, 4); in createContainerBegin()
854 return setContainerData(State, Cont, CData); in createContainerBegin()
858 return setContainerData(State, Cont, CData); in createContainerBegin()
861 ProgramStateRef createContainerEnd(ProgramStateRef State, const MemRegion *Cont, in createContainerEnd() argument
866 const auto *CDataPtr = getContainerData(State, Cont); in createContainerEnd()
868 return State; in createContainerEnd()
870 auto &SymMgr = State->getSymbolManager(); in createContainerEnd()
873 State = assumeNoOverflow(State, Sym, 4); in createContainerEnd()
877 return setContainerData(State, Cont, CData); in createContainerEnd()
881 return setContainerData(State, Cont, CData); in createContainerEnd()
884 ProgramStateRef setContainerData(ProgramStateRef State, const MemRegion *Cont, in setContainerData() argument
886 return State->set<ContainerMap>(Cont, CData); in setContainerData()
890 ProgramStateRef processIteratorPositions(ProgramStateRef State, Condition Cond, in processIteratorPositions() argument
892 auto &RegionMapFactory = State->get_context<IteratorRegionMap>(); in processIteratorPositions()
893 auto RegionMap = State->get<IteratorRegionMap>(); in processIteratorPositions()
903 State = State->set<IteratorRegionMap>(RegionMap); in processIteratorPositions()
905 auto &SymbolMapFactory = State->get_context<IteratorSymbolMap>(); in processIteratorPositions()
906 auto SymbolMap = State->get<IteratorSymbolMap>(); in processIteratorPositions()
916 State = State->set<IteratorSymbolMap>(SymbolMap); in processIteratorPositions()
918 return State; in processIteratorPositions()
921 ProgramStateRef invalidateAllIteratorPositions(ProgramStateRef State, in invalidateAllIteratorPositions() argument
929 return processIteratorPositions(State, MatchCont, Invalidate); in invalidateAllIteratorPositions()
933 invalidateAllIteratorPositionsExcept(ProgramStateRef State, in invalidateAllIteratorPositionsExcept() argument
938 !compare(State, Pos.getOffset(), Offset, Opc); in invalidateAllIteratorPositionsExcept()
943 return processIteratorPositions(State, MatchContAndCompare, Invalidate); in invalidateAllIteratorPositionsExcept()
946 ProgramStateRef invalidateIteratorPositions(ProgramStateRef State, in invalidateIteratorPositions() argument
950 return compare(State, Pos.getOffset(), Offset, Opc); in invalidateIteratorPositions()
955 return processIteratorPositions(State, Compare, Invalidate); in invalidateIteratorPositions()
958 ProgramStateRef invalidateIteratorPositions(ProgramStateRef State, in invalidateIteratorPositions() argument
964 return compare(State, Pos.getOffset(), Offset1, Opc1) && in invalidateIteratorPositions()
965 compare(State, Pos.getOffset(), Offset2, Opc2); in invalidateIteratorPositions()
970 return processIteratorPositions(State, Compare, Invalidate); in invalidateIteratorPositions()
973 ProgramStateRef reassignAllIteratorPositions(ProgramStateRef State, in reassignAllIteratorPositions() argument
982 return processIteratorPositions(State, MatchCont, ReAssign); in reassignAllIteratorPositions()
985 ProgramStateRef reassignAllIteratorPositionsUnless(ProgramStateRef State, in reassignAllIteratorPositionsUnless() argument
992 !compare(State, Pos.getOffset(), Offset, Opc); in reassignAllIteratorPositionsUnless()
997 return processIteratorPositions(State, MatchContAndCompare, ReAssign); in reassignAllIteratorPositionsUnless()
1004 ProgramStateRef State, SValBuilder &SVB, SymbolRef OldSym, in rebaseSymbolInIteratorPositionsIf() argument
1007 return compare(State, Pos.getOffset(), CondSym, Opc); in rebaseSymbolInIteratorPositionsIf()
1010 return Pos.setTo(rebaseSymbol(State, SVB, Pos.getOffset(), OldSym, in rebaseSymbolInIteratorPositionsIf()
1013 return processIteratorPositions(State, LessThanEnd, RebaseSymbol); in rebaseSymbolInIteratorPositionsIf()
1019 SymbolRef rebaseSymbol(ProgramStateRef State, SValBuilder &SVB, in rebaseSymbol() argument
1023 auto Diff = SVB.evalBinOpNN(State, BO_Sub, nonloc::SymbolVal(OrigExpr), in rebaseSymbol()
1031 return SVB.evalBinOpNN(State, BO_Add, *DiffInt, nonloc::SymbolVal(NewSym), in rebaseSymbol()
1035 bool hasLiveIterators(ProgramStateRef State, const MemRegion *Cont) { in hasLiveIterators() argument
1036 auto RegionMap = State->get<IteratorRegionMap>(); in hasLiveIterators()
1042 auto SymbolMap = State->get<IteratorSymbolMap>(); in hasLiveIterators()