Lines Matching refs:State

916   LLVM_NODISCARD static inline EquivalenceClass find(ProgramStateRef State,
921 ProgramStateRef State,
926 merge(RangeSet::Factory &F, ProgramStateRef State, EquivalenceClass Other);
929 LLVM_NODISCARD inline SymbolSet getClassMembers(ProgramStateRef State) const;
942 LLVM_NODISCARD inline bool isTrivial(ProgramStateRef State) const;
945 LLVM_NODISCARD inline bool isTriviallyDead(ProgramStateRef State,
949 markDisequal(RangeSet::Factory &F, ProgramStateRef State, SymbolRef First,
952 markDisequal(RangeSet::Factory &F, ProgramStateRef State,
955 markDisequal(RangeSet::Factory &F, ProgramStateRef State,
958 getDisequalClasses(ProgramStateRef State, SymbolRef Sym);
960 getDisequalClasses(ProgramStateRef State) const;
964 LLVM_NODISCARD static inline Optional<bool> areEqual(ProgramStateRef State,
968 areEqual(ProgramStateRef State, SymbolRef First, SymbolRef Second);
971 LLVM_NODISCARD ProgramStateRef removeMember(ProgramStateRef State,
977 ProgramStateRef State,
980 void dumpToStream(ProgramStateRef State, raw_ostream &os) const;
981 LLVM_DUMP_METHOD void dump(ProgramStateRef State) const { in dump()
982 dumpToStream(State, llvm::errs()); in dump()
987 isClassDataConsistent(ProgramStateRef State);
1025 static inline SymbolSet::Factory &getMembersFactory(ProgramStateRef State);
1027 inline ProgramStateRef mergeImpl(RangeSet::Factory &F, ProgramStateRef State,
1033 RangeSet::Factory &F, ProgramStateRef State,
1053 LLVM_NODISCARD inline const RangeSet *getConstraint(ProgramStateRef State, in getConstraint() argument
1055 return State->get<ConstraintRange>(Class); in getConstraint()
1058 LLVM_NODISCARD inline const RangeSet *getConstraint(ProgramStateRef State, in getConstraint() argument
1060 return getConstraint(State, EquivalenceClass::find(State, Sym)); in getConstraint()
1063 LLVM_NODISCARD ProgramStateRef setConstraint(ProgramStateRef State, in setConstraint() argument
1066 return State->set<ConstraintRange>(Class, Constraint); in setConstraint()
1069 LLVM_NODISCARD ProgramStateRef setConstraints(ProgramStateRef State, in setConstraints() argument
1071 return State->set<ConstraintRange>(Constraints); in setConstraints()
1209 static RangeSet inferRange(RangeSet::Factory &F, ProgramStateRef State, in inferRange() argument
1211 SymbolicRangeInferrer Inferrer(F, State); in inferRange()
1262 : ValueFactory(F.getValueFactory()), RangeFactory(F), State(S) {} in SymbolicRangeInferrer()
1289 getConstraint(State, Sym), in infer()
1296 if (const RangeSet *AssociatedConstraint = getConstraint(State, Class)) in infer()
1462 if (const RangeSet *NegatedRange = getConstraint(State, NegatedSym)) in getRangeForNegatedExpr()
1482 [SSE, State = this->State]() -> SymbolRef { in getRangeForNegatedSymSym()
1484 return State->getSymbolManager().getSymSymExpr( in getRangeForNegatedSymSym()
1493 [Sym, State = this->State]() { in getRangeForNegatedSym()
1494 return State->getSymbolManager().getUnarySymExpr(Sym, UO_Minus, in getRangeForNegatedSym()
1523 SymbolManager &SymMgr = State->getSymbolManager(); in getRangeForComparisonSymbol()
1539 const RangeSet *QueriedRangeSet = getConstraint(State, SymSym); in getRangeForComparisonSymbol()
1547 QueriedRangeSet = getConstraint(State, SymSym); in getRangeForComparisonSymbol()
1595 EquivalenceClass::areEqual(State, Sym->getLHS(), Sym->getRHS())) { in getRangeForEqualities()
1621 ProgramStateRef State; member in __anon77be4a4c0511::SymbolicRangeInferrer
1812 ConditionTruthVal checkNull(ProgramStateRef State, SymbolRef Sym) override;
1814 const llvm::APSInt *getSymVal(ProgramStateRef State,
1817 ProgramStateRef removeDeadBindings(ProgramStateRef State,
1820 void printJson(raw_ostream &Out, ProgramStateRef State, const char *NL = "\n",
1822 void printValue(raw_ostream &Out, ProgramStateRef State,
1824 void printConstraints(raw_ostream &Out, ProgramStateRef State,
1827 void printEquivalenceClasses(raw_ostream &Out, ProgramStateRef State,
1830 void printDisequalities(raw_ostream &Out, ProgramStateRef State,
1838 ProgramStateRef assumeSymNE(ProgramStateRef State, SymbolRef Sym,
1842 ProgramStateRef assumeSymEQ(ProgramStateRef State, SymbolRef Sym,
1846 ProgramStateRef assumeSymLT(ProgramStateRef State, SymbolRef Sym,
1850 ProgramStateRef assumeSymGT(ProgramStateRef State, SymbolRef Sym,
1854 ProgramStateRef assumeSymLE(ProgramStateRef State, SymbolRef Sym,
1858 ProgramStateRef assumeSymGE(ProgramStateRef State, SymbolRef Sym,
1863 ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From,
1867 ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From,
1873 RangeSet getRange(ProgramStateRef State, SymbolRef Sym);
1874 RangeSet getRange(ProgramStateRef State, EquivalenceClass Class);
1875 ProgramStateRef setRange(ProgramStateRef State, SymbolRef Sym,
1877 ProgramStateRef setRange(ProgramStateRef State, EquivalenceClass Class,
1999 assign(ProgramStateRef State, SValBuilder &Builder, RangeSet::Factory &F, in assign() argument
2001 if (!State || NewConstraint.isEmpty()) in assign()
2004 ConstraintAssignor Assignor{State, Builder, F}; in assign()
2017 State = State->assume(*NonLocSymSVal, true); in handleRemainderOp()
2018 if (!State) in handleRemainderOp()
2034 ConstraintAssignor(ProgramStateRef State, SValBuilder &Builder, in ConstraintAssignor() argument
2036 : State(State), Builder(Builder), RangeFactory(F) {} in ConstraintAssignor()
2043 State = assign(EquivalenceClass::find(State, Sym), NewConstraint); in assign()
2044 if (!State) in assign()
2050 return State; in assign()
2063 ConstraintRangeTy Constraints = State->get<ConstraintRange>(); in assign()
2064 ConstraintRangeTy::Factory &CF = State->get_context<ConstraintRange>(); in assign()
2069 for (EquivalenceClass DisequalClass : Class.getDisequalClasses(State)) { in assign()
2071 RangeFactory, State, DisequalClass); in assign()
2085 return setConstraints(State, Constraints); in assign()
2088 return setConstraint(State, Class, NewConstraint); in assign()
2091 ProgramStateRef trackDisequality(ProgramStateRef State, SymbolRef LHS, in trackDisequality() argument
2093 return EquivalenceClass::markDisequal(RangeFactory, State, LHS, RHS); in trackDisequality()
2096 ProgramStateRef trackEquality(ProgramStateRef State, SymbolRef LHS, in trackEquality() argument
2098 return EquivalenceClass::merge(RangeFactory, State, LHS, RHS); in trackEquality()
2113 ProgramStateRef State; member in __anon77be4a4c0511::ConstraintAssignor
2123 ClassMembersTy Members = State->get<ClassMembers>(); in assignSymExprToConst()
2126 State = EquivalenceClass::simplify(Builder, RangeFactory, State, Class); in assignSymExprToConst()
2127 if (!State) in assignSymExprToConst()
2135 ConstraintRangeTy Constraints = State->get<ConstraintRange>(); in assignSymExprToConst()
2140 State = EquivalenceClass::simplify(Builder, RangeFactory, State, Class); in assignSymExprToConst()
2141 if (!State) in assignSymExprToConst()
2147 DisequalityMapTy DisequalityInfo = State->get<DisequalityMap>(); in assignSymExprToConst()
2152 State = EquivalenceClass::simplify(Builder, RangeFactory, State, Class); in assignSymExprToConst()
2153 if (!State) in assignSymExprToConst()
2177 State = trackEquality(State, Sym->getLHS(), Sym->getRHS()); in assignSymSymExprToRangeSet()
2180 State = trackDisequality(State, Sym->getLHS(), Sym->getRHS()); in assignSymSymExprToRangeSet()
2183 if (!State) in assignSymSymExprToRangeSet()
2198 ConstraintMap ento::getConstraintMap(ProgramStateRef State) { in getConstraintMap() argument
2199 ConstraintMap::Factory &F = State->get_context<ConstraintMap>(); in getConstraintMap()
2202 ConstraintRangeTy Constraints = State->get<ConstraintRange>(); in getConstraintMap()
2205 SymbolSet ClassMembers = Class.getClassMembers(State); in getConstraintMap()
2220 LLVM_DUMP_METHOD void EquivalenceClass::dumpToStream(ProgramStateRef State, in dumpToStream() argument
2222 SymbolSet ClassMembers = getClassMembers(State); in dumpToStream()
2229 inline EquivalenceClass EquivalenceClass::find(ProgramStateRef State, in find() argument
2231 assert(State && "State should not be null"); in find()
2234 if (const EquivalenceClass *NontrivialClass = State->get<ClassMap>(Sym)) in find()
2242 ProgramStateRef State, in merge() argument
2245 EquivalenceClass FirstClass = find(State, First); in merge()
2246 EquivalenceClass SecondClass = find(State, Second); in merge()
2248 return FirstClass.merge(F, State, SecondClass); in merge()
2252 ProgramStateRef State, in merge() argument
2256 return State; in merge()
2270 return State; in merge()
2272 SymbolSet Members = getClassMembers(State); in merge()
2273 SymbolSet OtherMembers = Other.getClassMembers(State); in merge()
2279 return mergeImpl(F, State, Members, Other, OtherMembers); in merge()
2281 return Other.mergeImpl(F, State, OtherMembers, *this, Members); in merge()
2287 ProgramStateRef State, SymbolSet MyMembers, in mergeImpl() argument
2300 ConstraintRangeTy Constraints = State->get<ConstraintRange>(); in mergeImpl()
2301 ConstraintRangeTy::Factory &CRF = State->get_context<ConstraintRange>(); in mergeImpl()
2309 intersect(RangeFactory, getConstraint(State, *this), in mergeImpl()
2310 getConstraint(State, Other))) { in mergeImpl()
2328 State = State->set<ConstraintRange>(Constraints); in mergeImpl()
2332 ClassMapTy Classes = State->get<ClassMap>(); in mergeImpl()
2333 ClassMapTy::Factory &CMF = State->get_context<ClassMap>(); in mergeImpl()
2335 ClassMembersTy Members = State->get<ClassMembers>(); in mergeImpl()
2336 ClassMembersTy::Factory &MF = State->get_context<ClassMembers>(); in mergeImpl()
2338 DisequalityMapTy DisequalityInfo = State->get<DisequalityMap>(); in mergeImpl()
2339 DisequalityMapTy::Factory &DF = State->get_context<DisequalityMap>(); in mergeImpl()
2341 ClassSet::Factory &CF = State->get_context<ClassSet>(); in mergeImpl()
2342 SymbolSet::Factory &F = getMembersFactory(State); in mergeImpl()
2388 State = State->set<DisequalityMap>(DisequalityInfo); in mergeImpl()
2392 State = State->set<ClassMap>(Classes); in mergeImpl()
2393 State = State->set<ClassMembers>(Members); in mergeImpl()
2395 return State; in mergeImpl()
2399 EquivalenceClass::getMembersFactory(ProgramStateRef State) { in getMembersFactory() argument
2400 return State->get_context<SymbolSet>(); in getMembersFactory()
2403 SymbolSet EquivalenceClass::getClassMembers(ProgramStateRef State) const { in getClassMembers()
2404 if (const SymbolSet *Members = State->get<ClassMembers>(*this)) in getClassMembers()
2409 SymbolSet::Factory &F = getMembersFactory(State); in getClassMembers()
2413 bool EquivalenceClass::isTrivial(ProgramStateRef State) const { in isTrivial()
2414 return State->get<ClassMembers>(*this) == nullptr; in isTrivial()
2417 bool EquivalenceClass::isTriviallyDead(ProgramStateRef State, in isTriviallyDead() argument
2419 return isTrivial(State) && Reaper.isDead(getRepresentativeSymbol()); in isTriviallyDead()
2423 ProgramStateRef State, in markDisequal() argument
2426 return markDisequal(RF, State, find(State, First), find(State, Second)); in markDisequal()
2430 ProgramStateRef State, in markDisequal() argument
2433 return First.markDisequal(RF, State, Second); in markDisequal()
2437 EquivalenceClass::markDisequal(RangeSet::Factory &RF, ProgramStateRef State, in markDisequal() argument
2445 DisequalityMapTy DisequalityInfo = State->get<DisequalityMap>(); in markDisequal()
2446 ConstraintRangeTy Constraints = State->get<ConstraintRange>(); in markDisequal()
2450 if (!addToDisequalityInfo(DisequalityInfo, Constraints, RF, State, *this, in markDisequal()
2452 !addToDisequalityInfo(DisequalityInfo, Constraints, RF, State, Other, in markDisequal()
2459 State = State->set<DisequalityMap>(DisequalityInfo); in markDisequal()
2460 State = State->set<ConstraintRange>(Constraints); in markDisequal()
2462 return State; in markDisequal()
2467 RangeSet::Factory &RF, ProgramStateRef State, EquivalenceClass First, in addToDisequalityInfo() argument
2471 DisequalityMapTy::Factory &F = State->get_context<DisequalityMap>(); in addToDisequalityInfo()
2472 ClassSet::Factory &CF = State->get_context<ClassSet>(); in addToDisequalityInfo()
2473 ConstraintRangeTy::Factory &CRF = State->get_context<ConstraintRange>(); in addToDisequalityInfo()
2491 RF, State, First.getRepresentativeSymbol()); in addToDisequalityInfo()
2506 inline Optional<bool> EquivalenceClass::areEqual(ProgramStateRef State, in areEqual() argument
2509 return EquivalenceClass::areEqual(State, find(State, FirstSym), in areEqual()
2510 find(State, SecondSym)); in areEqual()
2513 inline Optional<bool> EquivalenceClass::areEqual(ProgramStateRef State, in areEqual() argument
2522 ClassSet DisequalToFirst = First.getDisequalClasses(State); in areEqual()
2531 EquivalenceClass::removeMember(ProgramStateRef State, const SymbolRef Old) { in removeMember() argument
2533 SymbolSet ClsMembers = getClassMembers(State); in removeMember()
2537 SymbolSet::Factory &F = getMembersFactory(State); in removeMember()
2538 ClassMembersTy::Factory &EMFactory = State->get_context<ClassMembers>(); in removeMember()
2545 ClassMembersTy ClassMembersMap = State->get<ClassMembers>(); in removeMember()
2547 State = State->set<ClassMembers>(ClassMembersMap); in removeMember()
2550 ClassMapTy Classes = State->get<ClassMap>(); in removeMember()
2551 ClassMapTy::Factory &CMF = State->get_context<ClassMap>(); in removeMember()
2553 State = State->set<ClassMap>(Classes); in removeMember()
2555 return State; in removeMember()
2559 LLVM_NODISCARD ProgramStateRef reAssume(ProgramStateRef State, in reAssume() argument
2563 return State; in reAssume()
2569 return State->assume(DefinedVal, false); in reAssume()
2574 State = State->assume(DefinedVal, true); in reAssume()
2575 if (!State) in reAssume()
2581 return State->assumeInclusiveRange(DefinedVal, Constraint->getMinValue(), in reAssume()
2592 ProgramStateRef State, EquivalenceClass Class) { in simplify() argument
2593 SymbolSet ClassMembers = Class.getClassMembers(State); in simplify()
2596 const SVal SimplifiedMemberVal = simplifyToSVal(State, MemberSym); in simplify()
2603 const RangeSet *ClassConstraint = getConstraint(State, Class); in simplify()
2613 ProgramStateRef OldState = State; in simplify()
2614 State = merge(F, State, MemberSym, SimplifiedMemberSym); in simplify()
2615 if (!State) in simplify()
2618 if (OldState == State) in simplify()
2621 assert(find(State, MemberSym) == find(State, SimplifiedMemberSym)); in simplify()
2623 State = find(State, MemberSym).removeMember(State, MemberSym); in simplify()
2627 const RangeSet *ClassConstraint = getConstraint(State, Class); in simplify()
2648 State = reAssume(State, ClassConstraint, SimplifiedMemberVal); in simplify()
2649 if (!State) in simplify()
2653 return State; in simplify()
2656 inline ClassSet EquivalenceClass::getDisequalClasses(ProgramStateRef State, in getDisequalClasses() argument
2658 return find(State, Sym).getDisequalClasses(State); in getDisequalClasses()
2662 EquivalenceClass::getDisequalClasses(ProgramStateRef State) const { in getDisequalClasses()
2663 return getDisequalClasses(State->get<DisequalityMap>(), in getDisequalClasses()
2664 State->get_context<ClassSet>()); in getDisequalClasses()
2676 bool EquivalenceClass::isClassDataConsistent(ProgramStateRef State) { in isClassDataConsistent() argument
2677 ClassMembersTy Members = State->get<ClassMembers>(); in isClassDataConsistent()
2682 if (find(State, Member) == ClassMembersPair.first) { in isClassDataConsistent()
2690 DisequalityMapTy Disequalities = State->get<DisequalityMap>(); in isClassDataConsistent()
2765 ConditionTruthVal RangeConstraintManager::checkNull(ProgramStateRef State, in checkNull() argument
2767 const RangeSet *Ranges = getConstraint(State, Sym); in checkNull()
2802 RangeConstraintManager::removeDeadBindings(ProgramStateRef State, in removeDeadBindings() argument
2804 ClassMembersTy ClassMembersMap = State->get<ClassMembers>(); in removeDeadBindings()
2806 ClassMembersTy::Factory &EMFactory = State->get_context<ClassMembers>(); in removeDeadBindings()
2807 SymbolSet::Factory &SetFactory = State->get_context<SymbolSet>(); in removeDeadBindings()
2809 ConstraintRangeTy Constraints = State->get<ConstraintRange>(); in removeDeadBindings()
2812 State->get_context<ConstraintRange>(); in removeDeadBindings()
2814 ClassMapTy Map = State->get<ClassMap>(); in removeDeadBindings()
2816 ClassMapTy::Factory &ClassFactory = State->get_context<ClassMap>(); in removeDeadBindings()
2818 DisequalityMapTy Disequalities = State->get<DisequalityMap>(); in removeDeadBindings()
2820 State->get_context<DisequalityMap>(); in removeDeadBindings()
2821 ClassSet::Factory &ClassSetFactory = State->get_context<ClassSet>(); in removeDeadBindings()
2865 if (Class.isTriviallyDead(State, SymReaper)) { in removeDeadBindings()
2919 State = State->set<ClassMap>(NewMap); in removeDeadBindings()
2922 State = State->set<ClassMembers>(NewClassMembersMap); in removeDeadBindings()
2925 State = State->set<ConstraintRange>(Constraints); in removeDeadBindings()
2928 State = State->set<DisequalityMap>(Disequalities); in removeDeadBindings()
2930 assert(EquivalenceClass::isClassDataConsistent(State)); in removeDeadBindings()
2932 return State; in removeDeadBindings()
2935 RangeSet RangeConstraintManager::getRange(ProgramStateRef State, in getRange() argument
2937 return SymbolicRangeInferrer::inferRange(F, State, Sym); in getRange()
2940 ProgramStateRef RangeConstraintManager::setRange(ProgramStateRef State, in setRange() argument
2943 return ConstraintAssignor::assign(State, getSValBuilder(), F, Sym, Range); in setRange()
3147 ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From, in assumeSymWithinInclusiveRange() argument
3149 RangeSet New = getSymGERange(State, Sym, From, Adjustment); in assumeSymWithinInclusiveRange()
3153 return setRange(State, Sym, Out); in assumeSymWithinInclusiveRange()
3157 ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From, in assumeSymOutsideInclusiveRange() argument
3159 RangeSet RangeLT = getSymLTRange(State, Sym, From, Adjustment); in assumeSymOutsideInclusiveRange()
3160 RangeSet RangeGT = getSymGTRange(State, Sym, To, Adjustment); in assumeSymOutsideInclusiveRange()
3162 return setRange(State, Sym, New); in assumeSymOutsideInclusiveRange()
3169 void RangeConstraintManager::printJson(raw_ostream &Out, ProgramStateRef State, in printJson() argument
3172 printConstraints(Out, State, NL, Space, IsDot); in printJson()
3173 printEquivalenceClasses(Out, State, NL, Space, IsDot); in printJson()
3174 printDisequalities(Out, State, NL, Space, IsDot); in printJson()
3177 void RangeConstraintManager::printValue(raw_ostream &Out, ProgramStateRef State, in printValue() argument
3179 const RangeSet RS = getRange(State, Sym); in printValue()
3192 ProgramStateRef State, in printConstraints() argument
3196 ConstraintRangeTy Constraints = State->get<ConstraintRange>(); in printConstraints()
3206 SymbolSet ClassMembers = P.first.getClassMembers(State); in printConstraints()
3237 static std::string toString(ProgramStateRef State, EquivalenceClass Class) { in toString() argument
3238 SymbolSet ClassMembers = Class.getClassMembers(State); in toString()
3263 ProgramStateRef State, in printEquivalenceClasses() argument
3267 ClassMembersTy Members = State->get<ClassMembers>(); in printEquivalenceClasses()
3277 MembersStr.insert(toString(State, ClassToSymbolSet.first)); in printEquivalenceClasses()
3299 ProgramStateRef State, in printDisequalities() argument
3303 DisequalityMapTy Disequalities = State->get<DisequalityMap>(); in printDisequalities()
3321 MembersStr.insert(toString(State, DisEqClass)); in printDisequalities()
3322 DisequalityInfoStr.insert({toString(State, Class), MembersStr}); in printDisequalities()