Lines Matching full:env

371 const Formula &forceBoolValue(Environment &Env, const Expr &Expr) {
372 auto *Value = Env.get<BoolValue>(Expr);
376 Value = &Env.makeAtomicBoolValue();
377 Env.setValue(Expr, *Value);
392 Environment &Env) {
393 Env.setValue(locForHasValue(OptionalLoc), HasValueVal);
398 BoolValue *getHasValue(Environment &Env, RecordStorageLocation *OptionalLoc) {
402 auto *HasValueVal = Env.get<BoolValue>(HasValueLoc);
404 HasValueVal = &Env.makeAtomicBoolValue();
405 Env.setValue(HasValueLoc, *HasValueVal);
430 const Environment &Env) {
432 if (auto *PointerVal = dyn_cast_or_null<PointerValue>(Env.getValue(E)))
436 return Env.getStorageLocation(E);
442 getLocBehindPossiblePointer(*ObjectExpr, State.Env))) {
443 if (State.Env.getStorageLocation(*UnwrapExpr) == nullptr)
444 State.Env.setStorageLocation(*UnwrapExpr, locForValue(*OptionalLoc));
451 getLocBehindPossiblePointer(*ObjectExpr, State.Env)))
452 State.Env.setValue(
453 *UnwrapExpr, State.Env.create<PointerValue>(locForValue(*OptionalLoc)));
459 setHasValue(State.Env.getResultObjectLocation(*E),
460 State.Env.getBoolLiteralValue(true), State.Env);
467 State.Env, getImplicitObjectLocation(*CallExpr, State.Env))) {
468 State.Env.setValue(*CallExpr, *HasValueVal);
476 State.Env, getImplicitObjectLocation(*CallExpr, State.Env))) {
477 State.Env.setValue(*CallExpr, State.Env.makeNot(*HasValueVal));
486 const Formula &(*ModelPred)(Environment &Env, const Formula &ExprVal,
488 auto &Env = State.Env;
494 getHasValue(State.Env, getImplicitObjectLocation(*MCE, State.Env));
498 Env.assume(ModelPred(Env, forceBoolValue(Env, *ValueOrPredExpr),
506 [](Environment &Env, const Formula &ExprVal,
508 auto &A = Env.arena();
524 [](Environment &Env, const Formula &ExprVal,
526 auto &A = Env.arena();
539 Loc = &State.Env.getResultObjectLocation(*E);
541 Loc = State.Env.get<RecordStorageLocation>(*E);
543 Loc = &cast<RecordStorageLocation>(State.Env.createStorageLocation(*E));
544 State.Env.setStorageLocation(*E, *Loc);
548 if (State.Env.getValue(locForHasValue(*Loc)) != nullptr)
551 setHasValue(*Loc, State.Env.makeAtomicBoolValue(), State.Env);
565 *RecordLoc, DirectCallee, State.Env, [&](StorageLocation &Loc) {
567 State.Env.makeAtomicBoolValue(), State.Env);
572 State.Env.setStorageLocation(*CE, Loc);
577 auto &ResultLoc = State.Env.getResultObjectLocation(*CE);
578 copyRecord(cast<RecordStorageLocation>(Loc), ResultLoc, State.Env);
588 State.Env);
591 State.Env.setValue(*CE, *Val);
606 MCE, dataflow::getImplicitObjectLocation(*MCE, State.Env), Result, State);
613 State.Env.getStorageLocation(*OCE->getArg(0)));
631 setHasValue(*FieldRecordLoc, State.Env.makeAtomicBoolValue(),
632 State.Env);
650 MCE, dataflow::getImplicitObjectLocation(*MCE, State.Env), Result, State);
657 State.Env.getStorageLocation(*OCE->getArg(0)));
661 void constructOptionalValue(const Expr &E, Environment &Env,
663 RecordStorageLocation &Loc = Env.getResultObjectLocation(E);
664 setHasValue(Loc, HasValueVal, Env);
684 return State.Env.getBoolLiteralValue(true);
690 auto *Loc = State.Env.get<RecordStorageLocation>(E);
691 if (auto *HasValueVal = getHasValue(State.Env, Loc))
693 return State.Env.makeAtomicBoolValue();
702 *E, State.Env,
712 if (auto *Loc = State.Env.get<RecordStorageLocation>(*E->getArg(0))) {
713 setHasValue(*Loc, HasValueVal, State.Env);
716 State.Env.setStorageLocation(*E, *Loc);
734 transferAssignment(E, State.Env.getBoolLiteralValue(false), State);
738 Environment &Env) {
745 setHasValue(*Loc2, Env.makeAtomicBoolValue(), Env);
749 setHasValue(*Loc1, Env.makeAtomicBoolValue(), Env);
759 BoolValue *BoolVal1 = getHasValue(Env, Loc1);
761 BoolVal1 = &Env.makeAtomicBoolValue();
763 BoolValue *BoolVal2 = getHasValue(Env, Loc2);
765 BoolVal2 = &Env.makeAtomicBoolValue();
767 setHasValue(*Loc1, *BoolVal2, Env);
768 setHasValue(*Loc2, *BoolVal1, Env);
775 auto *OtherLoc = State.Env.get<RecordStorageLocation>(*E->getArg(0));
776 transferSwap(getImplicitObjectLocation(*E, State.Env), OtherLoc, State.Env);
782 auto *Arg0Loc = State.Env.get<RecordStorageLocation>(*E->getArg(0));
783 auto *Arg1Loc = State.Env.get<RecordStorageLocation>(*E->getArg(1));
784 transferSwap(Arg0Loc, Arg1Loc, State.Env);
791 if (auto *Loc = State.Env.getStorageLocation(*E->getArg(0)))
792 State.Env.setStorageLocation(*E, *Loc);
820 Environment &Env = State.Env;
821 auto &A = Env.arena();
822 auto *CmpValue = &forceBoolValue(Env, *CmpExpr);
823 auto *Arg0Loc = Env.get<RecordStorageLocation>(*CmpExpr->getArg(0));
824 if (auto *LHasVal = getHasValue(Env, Arg0Loc)) {
825 auto *Arg1Loc = Env.get<RecordStorageLocation>(*CmpExpr->getArg(1));
826 if (auto *RHasVal = getHasValue(Env, Arg1Loc)) {
829 Env.assume(evaluateEquality(A, *CmpValue, LHasVal->formula(),
836 const clang::Expr *E, Environment &Env) {
837 auto &A = Env.arena();
838 auto *CmpValue = &forceBoolValue(Env, *CmpExpr);
839 auto *Loc = Env.get<RecordStorageLocation>(*E);
840 if (auto *HasVal = getHasValue(Env, Loc)) {
843 Env.assume(
849 const clang::Expr *E, Environment &Env) {
850 auto &A = Env.arena();
851 auto *CmpValue = &forceBoolValue(Env, *CmpExpr);
852 auto *Loc = Env.get<RecordStorageLocation>(*E);
853 if (auto *HasVal = getHasValue(Env, Loc)) {
856 Env.assume(evaluateEquality(A, *CmpValue, HasVal->formula(),
898 constructOptionalValue(*E, State.Env,
899 State.Env.getBoolLiteralValue(true));
906 constructOptionalValue(*E, State.Env,
907 State.Env.getBoolLiteralValue(false));
969 getImplicitObjectLocation(*E, State.Env)) {
970 setHasValue(*Loc, State.Env.getBoolLiteralValue(true), State.Env);
980 getImplicitObjectLocation(*E, State.Env)) {
981 setHasValue(*Loc, State.Env.getBoolLiteralValue(false),
982 State.Env);
1012 transferOptionalAndNulloptCmp(Cmp, Cmp->getArg(0), State.Env);
1018 transferOptionalAndNulloptCmp(Cmp, Cmp->getArg(1), State.Env);
1026 transferOptionalAndValueCmp(Cmp, Cmp->getArg(0), State.Env);
1034 transferOptionalAndValueCmp(Cmp, Cmp->getArg(1), State.Env);
1048 getLocBehindPossiblePointer(*E->getArg(0), State.Env)),
1059 getLocBehindPossiblePointer(*E->getArg(0), State.Env)),
1067 E, getImplicitObjectLocation(*E, State.Env), State,
1075 E, getImplicitObjectLocation(*E, State.Env), State,
1099 const Environment &Env) {
1101 getLocBehindPossiblePointer(*ObjectExpr, Env))) {
1102 auto *Prop = Env.getValue(locForHasValue(*OptionalLoc));
1104 if (Env.proves(HasValueVal->formula()))
1127 const Environment &Env) {
1128 return diagnoseUnwrapCall(E->getImplicitObjectArgument(), Env);
1135 const Environment &Env) {
1136 return diagnoseUnwrapCall(E->getArg(0), Env);
1149 Environment &Env)
1153 Env.getDataflowAnalysisContext().setSyntheticFieldCallback(
1166 Environment &Env) {
1167 LatticeTransferState State(L, Env);