Lines Matching refs:State
104 void processComparison(CheckerContext &C, ProgramStateRef State,
125 void printState(raw_ostream &Out, ProgramStateRef State, const char *NL,
157 void checkLiveSymbols(ProgramStateRef State, SymbolReaper &SR) const;
163 ProgramStateRef removeIteratorPosition(ProgramStateRef State, SVal Val);
164 ProgramStateRef relateSymbols(ProgramStateRef State, SymbolRef Sym1,
198 auto State = C.getState(); in checkPostCall() local
201 if (getIteratorPosition(State, Call.getReturnValue())) in checkPostCall()
206 if (const auto *Pos = getIteratorPosition(State, Call.getArgSVal(0))) { in checkPostCall()
207 State = setIteratorPosition(State, Call.getReturnValue(), *Pos); in checkPostCall()
209 State = removeIteratorPosition(State, Call.getArgSVal(0)); in checkPostCall()
211 C.addTransition(State); in checkPostCall()
226 if (const auto *Pos = getIteratorPosition(State, Call.getArgSVal(i))) { in checkPostCall()
237 auto State = C.getState(); in checkBind() local
238 const auto *Pos = getIteratorPosition(State, Val); in checkBind()
240 State = setIteratorPosition(State, Loc, *Pos); in checkBind()
241 C.addTransition(State); in checkBind()
243 const auto *OldPos = getIteratorPosition(State, Loc); in checkBind()
245 State = removeIteratorPosition(State, Loc); in checkBind()
246 C.addTransition(State); in checkBind()
265 const ProgramStateRef State = C.getState(); in checkPostStmt() local
269 const SVal LVal = State->getSVal(LHS, C.getLocationContext()); in checkPostStmt()
270 const SVal RVal = State->getSVal(RHS, C.getLocationContext()); in checkPostStmt()
273 SVal Result = State->getSVal(BO, C.getLocationContext()); in checkPostStmt()
295 auto State = C.getState(); in checkPostStmt() local
296 const auto *Pos = getIteratorPosition(State, C.getSVal(MTE->getSubExpr())); in checkPostStmt()
299 State = setIteratorPosition(State, C.getSVal(MTE), *Pos); in checkPostStmt()
300 C.addTransition(State); in checkPostStmt()
303 void IteratorModeling::checkLiveSymbols(ProgramStateRef State, in checkLiveSymbols() argument
306 auto RegionMap = State->get<IteratorRegionMap>(); in checkLiveSymbols()
313 auto SymbolMap = State->get<IteratorSymbolMap>(); in checkLiveSymbols()
324 auto State = C.getState(); in checkDeadSymbols() local
326 auto RegionMap = State->get<IteratorRegionMap>(); in checkDeadSymbols()
332 if (!isBoundThroughLazyCompoundVal(State->getEnvironment(), Reg.first)) { in checkDeadSymbols()
333 State = State->remove<IteratorRegionMap>(Reg.first); in checkDeadSymbols()
338 auto SymbolMap = State->get<IteratorSymbolMap>(); in checkDeadSymbols()
341 State = State->remove<IteratorSymbolMap>(Sym.first); in checkDeadSymbols()
345 C.addTransition(State); in checkDeadSymbols()
453 auto State = C.getState(); in handleComparison() local
454 const auto *LPos = getIteratorPosition(State, LVal); in handleComparison()
455 const auto *RPos = getIteratorPosition(State, RVal); in handleComparison()
472 State = assumeNoOverflow(State, Sym, 4); in handleComparison()
476 State = setIteratorPosition(State, LVal, in handleComparison()
478 LPos = getIteratorPosition(State, LVal); in handleComparison()
480 State = setIteratorPosition(State, RVal, in handleComparison()
482 RPos = getIteratorPosition(State, RVal); in handleComparison()
498 State = State->BindExpr(CE, LCtx, RetVal); in handleComparison()
501 processComparison(C, State, LPos->getOffset(), RPos->getOffset(), RetVal, Op); in handleComparison()
505 ProgramStateRef State, SymbolRef Sym1, in processComparison() argument
509 if ((State = relateSymbols(State, Sym1, Sym2, in processComparison()
512 C.addTransition(State); in processComparison()
514 C.generateSink(State, C.getPredecessor()); in processComparison()
523 if (auto StateTrue = relateSymbols(State, Sym1, Sym2, Op == OO_EqualEqual)) { in processComparison()
528 if (auto StateFalse = relateSymbols(State, Sym1, Sym2, Op != OO_EqualEqual)) { in processComparison()
538 auto State = C.getState(); in handleIncrement() local
541 const auto *Pos = getIteratorPosition(State, Iter); in handleIncrement()
546 advancePosition(State, Iter, OO_Plus, in handleIncrement()
555 State = setIteratorPosition(State, Iter, *NewPos); in handleIncrement()
556 State = setIteratorPosition(State, RetVal, Postfix ? *Pos : *NewPos); in handleIncrement()
557 C.addTransition(State); in handleIncrement()
564 auto State = C.getState(); in handleDecrement() local
567 const auto *Pos = getIteratorPosition(State, Iter); in handleDecrement()
572 advancePosition(State, Iter, OO_Minus, in handleDecrement()
581 State = setIteratorPosition(State, Iter, *NewPos); in handleDecrement()
582 State = setIteratorPosition(State, RetVal, Postfix ? *Pos : *NewPos); in handleDecrement()
583 C.addTransition(State); in handleDecrement()
592 auto State = C.getState(); in handleRandomIncrOrDecr() local
594 const auto *Pos = getIteratorPosition(State, Iterator); in handleRandomIncrOrDecr()
601 Val = State->getRawSVal(*LocAmount); in handleRandomIncrOrDecr()
611 auto AdvancedState = advancePosition(State, Iterator, Op, *Value); in handleRandomIncrOrDecr()
617 State = setIteratorPosition(State, TgtVal, *NewPos); in handleRandomIncrOrDecr()
618 C.addTransition(State); in handleRandomIncrOrDecr()
636 ProgramStateRef State = C.getState(); in handlePtrIncrOrDecr() local
637 SVal OldVal = State->getSVal(Iterator, C.getLocationContext()); in handlePtrIncrOrDecr()
639 const IteratorPosition *OldPos = getIteratorPosition(State, OldVal); in handlePtrIncrOrDecr()
645 NewVal = State->getLValue(ElementType, Offset, OldVal); in handlePtrIncrOrDecr()
649 NewVal = State->getLValue(ElementType, NegatedOffset, OldVal); in handlePtrIncrOrDecr()
655 auto AdvancedState = advancePosition(State, OldVal, OK, Offset); in handlePtrIncrOrDecr()
661 ProgramStateRef NewState = setIteratorPosition(State, NewVal, *NewPos); in handlePtrIncrOrDecr()
689 auto State = C.getState(); in assignToContainer() local
691 State = createIteratorPosition(State, RetVal, Cont, CE, LCtx, C.blockCount()); in assignToContainer()
693 C.addTransition(State); in assignToContainer()
726 void IteratorModeling::printState(raw_ostream &Out, ProgramStateRef State, in printState() argument
728 auto SymbolMap = State->get<IteratorSymbolMap>(); in printState()
729 auto RegionMap = State->get<IteratorRegionMap>(); in printState()
773 ProgramStateRef removeIteratorPosition(ProgramStateRef State, SVal Val) { in removeIteratorPosition() argument
776 return State->remove<IteratorRegionMap>(Reg); in removeIteratorPosition()
778 return State->remove<IteratorSymbolMap>(Sym); in removeIteratorPosition()
780 return State->remove<IteratorRegionMap>(LCVal->getRegion()); in removeIteratorPosition()
785 ProgramStateRef relateSymbols(ProgramStateRef State, SymbolRef Sym1, in relateSymbols() argument
787 auto &SVB = State->getStateManager().getSValBuilder(); in relateSymbols()
795 SVB.evalBinOp(State, BO_EQ, nonloc::SymbolVal(Sym1), in relateSymbols()
801 auto NewState = State->assume(comparison.castAs<DefinedSVal>(), Equal); in relateSymbols()