Lines Matching full:env
203 BoolValue &forceBoolValue(Environment &Env, const Expr &Expr) { in forceBoolValue() argument
204 auto *Value = cast_or_null<BoolValue>(Env.getValue(Expr, SkipPast::None)); in forceBoolValue()
208 auto &Loc = Env.createStorageLocation(Expr); in forceBoolValue()
209 Value = &Env.makeAtomicBoolValue(); in forceBoolValue()
210 Env.setValue(Loc, *Value); in forceBoolValue()
211 Env.setStorageLocation(Expr, Loc); in forceBoolValue()
223 StructValue &createOptionalValue(Environment &Env, BoolValue &HasValueVal) { in createOptionalValue() argument
226 return Env.takeOwnership(std::move(OptionalVal)); in createOptionalValue()
231 BoolValue *getHasValue(Environment &Env, Value *OptionalVal) { in getHasValue() argument
236 HasValueVal = &Env.makeAtomicBoolValue(); in getHasValue()
280 Environment &Env) { in maybeInitializeOptionalValueMember() argument
289 if (Env.getValue(ValueLoc) == nullptr) { in maybeInitializeOptionalValueMember()
301 auto *ValueVal = Env.createValue(ValueLoc.getType()); in maybeInitializeOptionalValueMember()
304 Env.setValue(ValueLoc, *ValueVal); in maybeInitializeOptionalValueMember()
310 auto *ValueVal = Env.createValue(Ty); in maybeInitializeOptionalValueMember()
313 auto &ValueLoc = Env.createStorageLocation(Ty); in maybeInitializeOptionalValueMember()
314 Env.setValue(ValueLoc, *ValueVal); in maybeInitializeOptionalValueMember()
316 OptionalVal.setProperty("value", Env.takeOwnership(std::move(ValueRef))); in maybeInitializeOptionalValueMember()
324 State.Env.getValue(*OptionalExpr, SkipPast::Reference)) { in initializeOptionalReference()
326 setHasValue(*OptionalVal, State.Env.makeAtomicBoolValue()); in initializeOptionalReference()
332 /// empty in `Env.
333 bool isEmptyOptional(const Value &OptionalVal, const Environment &Env) { in isEmptyOptional() argument
337 Env.flowConditionImplies(Env.makeNot(*HasValueVal)); in isEmptyOptional()
341 /// non-empty in `Env.
342 bool isNonEmptyOptional(const Value &OptionalVal, const Environment &Env) { in isNonEmptyOptional() argument
345 return HasValueVal != nullptr && Env.flowConditionImplies(*HasValueVal); in isNonEmptyOptional()
351 State.Env.getValue(*ObjectExpr, SkipPast::ReferenceThenPointer)) { in transferUnwrapCall()
352 if (State.Env.getStorageLocation(*UnwrapExpr, SkipPast::None) == nullptr) in transferUnwrapCall()
354 UnwrapExpr->getType(), *OptionalVal, State.Env)) in transferUnwrapCall()
355 State.Env.setStorageLocation(*UnwrapExpr, *Loc); in transferUnwrapCall()
362 auto &Loc = State.Env.createStorageLocation(*E); in transferMakeOptionalCall()
363 State.Env.setStorageLocation(*E, Loc); in transferMakeOptionalCall()
364 State.Env.setValue( in transferMakeOptionalCall()
365 Loc, createOptionalValue(State.Env, State.Env.getBoolLiteralValue(true))); in transferMakeOptionalCall()
372 State.Env, State.Env.getValue(*CallExpr->getImplicitObjectArgument(), in transferOptionalHasValueCall()
374 auto &CallExprLoc = State.Env.createStorageLocation(*CallExpr); in transferOptionalHasValueCall()
375 State.Env.setValue(CallExprLoc, *HasValueVal); in transferOptionalHasValueCall()
376 State.Env.setStorageLocation(*CallExpr, CallExprLoc); in transferOptionalHasValueCall()
385 BoolValue &(*ModelPred)(Environment &Env, in transferValueOrImpl() argument
388 auto &Env = State.Env; in transferValueOrImpl() local
395 State.Env, in transferValueOrImpl()
396 State.Env.getValue(*ObjectArgumentExpr, SkipPast::ReferenceThenPointer)); in transferValueOrImpl()
400 Env.addToFlowCondition( in transferValueOrImpl()
401 ModelPred(Env, forceBoolValue(Env, *ValueOrPredExpr), *HasValueVal)); in transferValueOrImpl()
408 [](Environment &Env, BoolValue &ExprVal, in transferValueOrStringEmptyCall()
416 return Env.makeImplication(Env.makeNot(ExprVal), in transferValueOrStringEmptyCall()
425 [](Environment &Env, BoolValue &ExprVal, in transferValueOrNotEqX() argument
430 return Env.makeImplication(ExprVal, HasValueVal); in transferValueOrNotEqX()
437 if (State.Env.getStorageLocation(*E, SkipPast::None) != nullptr) in transferCallReturningOptional()
440 auto &Loc = State.Env.createStorageLocation(*E); in transferCallReturningOptional()
441 State.Env.setStorageLocation(*E, Loc); in transferCallReturningOptional()
442 State.Env.setValue( in transferCallReturningOptional()
443 Loc, createOptionalValue(State.Env, State.Env.makeAtomicBoolValue())); in transferCallReturningOptional()
446 void assignOptionalValue(const Expr &E, Environment &Env, in assignOptionalValue() argument
449 Env.getStorageLocation(E, SkipPast::ReferenceThenPointer)) { in assignOptionalValue()
450 Env.setValue(*OptionalLoc, createOptionalValue(Env, HasValueVal)); in assignOptionalValue()
472 return State.Env.getBoolLiteralValue(true); in valueOrConversionHasValue()
477 getHasValue(State.Env, State.Env.getValue(E, SkipPast::Reference))) in valueOrConversionHasValue()
479 return State.Env.makeAtomicBoolValue(); in valueOrConversionHasValue()
487 assignOptionalValue(*E, State.Env, in transferValueOrConversionConstructor()
498 State.Env.getStorageLocation(*E->getArg(0), SkipPast::Reference); in transferAssignment()
502 State.Env.setValue(*OptionalLoc, createOptionalValue(State.Env, HasValueVal)); in transferAssignment()
505 State.Env.setStorageLocation(*E, *OptionalLoc); in transferAssignment()
521 transferAssignment(E, State.Env.getBoolLiteralValue(false), State); in transferNulloptAssignment()
527 auto *OptionalVal1 = State.Env.getValue(OptionalLoc1); in transferSwap()
530 auto *OptionalVal2 = State.Env.getValue(OptionalLoc2); in transferSwap()
533 State.Env.setValue(OptionalLoc1, *OptionalVal2); in transferSwap()
534 State.Env.setValue(OptionalLoc2, *OptionalVal1); in transferSwap()
542 auto *OptionalLoc1 = State.Env.getStorageLocation( in transferSwapCall()
547 State.Env.getStorageLocation(*E->getArg(0), SkipPast::Reference); in transferSwapCall()
558 State.Env.getStorageLocation(*E->getArg(0), SkipPast::Reference); in transferStdSwapCall()
562 State.Env.getStorageLocation(*E->getArg(1), SkipPast::Reference); in transferStdSwapCall()
568 BoolValue &evaluateEquality(Environment &Env, BoolValue &EqVal, BoolValue &LHS, in evaluateEquality() argument
584 return Env.makeAnd( in evaluateEquality()
585 Env.makeImplication( in evaluateEquality()
586 EqVal, Env.makeOr(Env.makeAnd(LHS, RHS), in evaluateEquality()
587 Env.makeAnd(Env.makeNot(LHS), Env.makeNot(RHS)))), in evaluateEquality()
588 Env.makeImplication(Env.makeNot(EqVal), Env.makeOr(LHS, RHS))); in evaluateEquality()
594 Environment &Env = State.Env; in transferOptionalAndOptionalCmp() local
595 auto *CmpValue = &forceBoolValue(Env, *CmpExpr); in transferOptionalAndOptionalCmp()
597 Env, Env.getValue(*CmpExpr->getArg(0), SkipPast::Reference))) in transferOptionalAndOptionalCmp()
599 Env, Env.getValue(*CmpExpr->getArg(1), SkipPast::Reference))) { in transferOptionalAndOptionalCmp()
601 CmpValue = &State.Env.makeNot(*CmpValue); in transferOptionalAndOptionalCmp()
602 Env.addToFlowCondition( in transferOptionalAndOptionalCmp()
603 evaluateEquality(Env, *CmpValue, *LHasVal, *RHasVal)); in transferOptionalAndOptionalCmp()
608 const clang::Expr *E, Environment &Env) { in transferOptionalAndValueCmp() argument
609 auto *CmpValue = &forceBoolValue(Env, *CmpExpr); in transferOptionalAndValueCmp()
610 if (auto *HasVal = getHasValue(Env, Env.getValue(*E, SkipPast::Reference))) { in transferOptionalAndValueCmp()
612 CmpValue = &Env.makeNot(*CmpValue); in transferOptionalAndValueCmp()
613 Env.addToFlowCondition(evaluateEquality(Env, *CmpValue, *HasVal, in transferOptionalAndValueCmp()
614 Env.getBoolLiteralValue(true))); in transferOptionalAndValueCmp()
660 assignOptionalValue(*E, State.Env, in buildTransferMatchSwitch()
661 State.Env.getBoolLiteralValue(true)); in buildTransferMatchSwitch()
668 assignOptionalValue(*E, State.Env, in buildTransferMatchSwitch()
669 State.Env.getBoolLiteralValue(false)); in buildTransferMatchSwitch()
676 assignOptionalValue(*E, State.Env, in buildTransferMatchSwitch()
677 State.Env.getBoolLiteralValue(false)); in buildTransferMatchSwitch()
722 assignOptionalValue(*E->getImplicitObjectArgument(), State.Env, in buildTransferMatchSwitch()
723 State.Env.getBoolLiteralValue(true)); in buildTransferMatchSwitch()
731 assignOptionalValue(*E->getImplicitObjectArgument(), State.Env, in buildTransferMatchSwitch()
732 State.Env.getBoolLiteralValue(false)); in buildTransferMatchSwitch()
758 transferOptionalAndValueCmp(Cmp, Cmp->getArg(0), State.Env); in buildTransferMatchSwitch()
765 transferOptionalAndValueCmp(Cmp, Cmp->getArg(1), State.Env); in buildTransferMatchSwitch()
777 const Environment &Env) { in diagnoseUnwrapCall() argument
779 Env.getValue(*ObjectExpr, SkipPast::ReferenceThenPointer)) { in diagnoseUnwrapCall()
782 if (Env.flowConditionImplies(*HasValueVal)) in diagnoseUnwrapCall()
804 const Environment &Env) { in buildDiagnoseMatchSwitch() argument
805 return diagnoseUnwrapCall(E, E->getImplicitObjectArgument(), Env); in buildDiagnoseMatchSwitch()
812 const Environment &Env) { in buildDiagnoseMatchSwitch() argument
813 return diagnoseUnwrapCall(E, E->getArg(0), Env); in buildDiagnoseMatchSwitch()
830 NoopLattice &L, Environment &Env) { in transfer() argument
831 LatticeTransferState State(L, Env); in transfer()
907 ASTContext &Ctx, const CFGElement *Elt, const Environment &Env) { in diagnose() argument
908 return DiagnoseMatchSwitch(*Elt, Ctx, Env); in diagnose()