Lines Matching defs:Env
52 return &CurState.Env;
56 return &State->Env;
60 Environment &Env) {
61 Value *LHSValue = Env.getValue(LHS);
62 Value *RHSValue = Env.getValue(RHS);
65 return Env.getBoolLiteralValue(true);
69 return Env.makeIff(*LHSBool, *RHSBool);
77 return Env.getBoolLiteralValue(true);
79 return Env.makeAtomicBoolValue();
82 static BoolValue &unpackValue(BoolValue &V, Environment &Env) {
84 auto &A = Env.getDataflowAnalysisContext().arena();
93 static Value *maybeUnpackLValueExpr(const Expr &E, Environment &Env) {
94 auto *Loc = Env.getStorageLocation(E);
97 auto *Val = Env.getValue(*Loc);
103 auto &UnpackedVal = unpackValue(*B, Env);
106 Env.setValue(*Loc, UnpackedVal);
110 static void propagateValue(const Expr &From, const Expr &To, Environment &Env) {
113 if (auto *Val = Env.getValue(From))
114 Env.setValue(To, *Val);
118 Environment &Env) {
119 if (auto *Loc = Env.getStorageLocation(From))
120 Env.setStorageLocation(To, *Loc);
127 Environment &Env) {
130 propagateStorageLocation(From, To, Env);
132 propagateValue(From, To, Env);
139 TransferVisitor(const StmtToEnvMap &StmtToEnv, Environment &Env,
141 : StmtToEnv(StmtToEnv), Env(Env), Model(Model) {}
155 propagateStorageLocation(*S->getLHS(), *S, Env);
159 auto *LHSLoc = Env.getStorageLocation(*LHS);
163 auto *RHSVal = Env.getValue(*RHS);
168 Env.setValue(*LHSLoc, *RHSVal);
171 Env.setStorageLocation(*S, *LHSLoc);
180 Env.setValue(*S, Env.makeAnd(LHSVal, RHSVal));
182 Env.setValue(*S, Env.makeOr(LHSVal, RHSVal));
187 auto &LHSEqRHSValue = evaluateBooleanEquality(*LHS, *RHS, Env);
188 Env.setValue(*S, S->getOpcode() == BO_EQ ? LHSEqRHSValue
189 : Env.makeNot(LHSEqRHSValue));
193 propagateValueOrStorageLocation(*RHS, *S, Env);
217 auto *DeclLoc = Env.getStorageLocation(*VD);
221 Env.setStorageLocation(*S, *DeclLoc);
240 if (D.getType()->isReferenceType() && Env.getStorageLocation(D) != nullptr)
243 assert(Env.getStorageLocation(D) == nullptr);
245 Env.setStorageLocation(D, Env.createObject(D));
267 if (auto *Loc = Env.getStorageLocation(*ME))
268 Env.setStorageLocation(*B, *Loc);
277 auto *VDLoc = Env.getStorageLocation(*VD);
279 Env.setStorageLocation(*B, *VDLoc);
295 dyn_cast_or_null<BoolValue>(Env.getValue(*SubExpr)))
296 Env.setValue(*S, *SubExprVal);
300 Env.setValue(*S, Env.makeAtomicBoolValue());
307 auto *SubExprVal = maybeUnpackLValueExpr(*SubExpr, Env);
311 Env.setValue(*S, *SubExprVal);
330 propagateValueOrStorageLocation(*SubExpr, *S, Env);
335 Env.getOrCreateNullPointerValue(S->getType()->getPointeeType());
336 Env.setValue(*S, NullPointerVal);
344 StorageLocation *PointeeLoc = Env.getStorageLocation(*SubExpr);
348 Env.setValue(*S, Env.create<PointerValue>(*PointeeLoc));
368 const auto *SubExprVal = Env.get<PointerValue>(*SubExpr);
372 Env.setStorageLocation(*S, SubExprVal->getPointeeLoc());
380 if (StorageLocation *PointeeLoc = Env.getStorageLocation(*SubExpr))
381 Env.setValue(*S, Env.create<PointerValue>(*PointeeLoc));
385 auto *SubExprVal = dyn_cast_or_null<BoolValue>(Env.getValue(*SubExpr));
389 Env.setValue(*S, Env.makeNot(*SubExprVal));
398 propagateStorageLocation(*S->getSubExpr(), *S, Env);
399 if (StorageLocation *Loc = Env.getStorageLocation(*S->getSubExpr()))
400 Env.clearValue(*Loc);
407 propagateValue(*S->getSubExpr(), *S, Env);
408 if (StorageLocation *Loc = Env.getStorageLocation(*S->getSubExpr()))
409 Env.clearValue(*Loc);
417 auto *ThisPointeeLoc = Env.getThisPointeeStorageLocation();
423 Env.setValue(*S, Env.create<PointerValue>(*ThisPointeeLoc));
427 if (Value *Val = Env.createValue(S->getType()))
428 Env.setValue(*S, *Val);
439 if (!Env.getDataflowAnalysisContext().getOptions().ContextSensitiveOpts)
450 auto *Val = Env.getValue(*Ret);
455 Env.setReturnValue(Val);
457 auto *Loc = Env.getStorageLocation(*Ret);
462 Env.setReturnStorageLocation(Loc);
480 auto *VarDeclLoc = Env.getStorageLocation(*D);
484 Env.setStorageLocation(*S, *VarDeclLoc);
489 RecordStorageLocation *BaseLoc = getBaseObjectLocation(*S, Env);
496 Env.setStorageLocation(*S, *MemberLoc);
502 propagateValueOrStorageLocation(*ArgExpr, *S, Env);
505 auto &Loc = Env.getResultObjectLocation(*S);
506 Env.initializeFieldsWithValues(Loc);
520 propagateValueOrStorageLocation(*InitExpr, *S, Env);
535 RecordStorageLocation &Loc = Env.getResultObjectLocation(*S);
545 auto *ArgLoc = Env.get<RecordStorageLocation>(*Arg);
552 copyRecord(*ArgLoc, Loc, Env);
556 Env.initializeFieldsWithValues(Loc, S->getType());
582 LocSrc = &Env.getResultObjectLocation(*Arg1);
584 LocSrc = Env.get<RecordStorageLocation>(*Arg1);
586 auto *LocDst = Env.get<RecordStorageLocation>(*Arg0);
591 copyRecord(*LocSrc, *LocDst, Env);
607 Env.setStorageLocation(*S, *LocDst);
609 copyRecord(*LocDst, Env.getResultObjectLocation(*S), Env);
620 propagateValue(*RBO->getSemanticForm(), *RBO, Env);
633 auto *ArgLoc = Env.getStorageLocation(*Arg);
637 Env.setStorageLocation(*S, *ArgLoc);
643 auto *ArgVal = Env.getValue(*S->getArg(0));
646 Env.setValue(*S, *ArgVal);
653 RecordStorageLocation &Loc = Env.getResultObjectLocation(*S);
654 Env.initializeFieldsWithValues(Loc);
663 StorageLocation &Loc = Env.createStorageLocation(*S);
664 Env.setStorageLocation(*S, Loc);
671 if (Value *SubExprVal = Env.getValue(*SubExpr))
672 Env.setValue(Loc, *SubExprVal);
679 propagateValue(*SubExpr, *S, Env);
687 propagateValueOrStorageLocation(*SubExpr, *S, Env);
708 Env.setStorageLocation(*S, *TrueLoc);
727 FalseEnv->getValue(*S->getFalseExpr()), *FalseEnv, Env, Model))
728 Env.setValue(*S, *Val);
739 propagateValueOrStorageLocation(*S->getInit(0), *S, Env);
747 RecordStorageLocation &Loc = Env.getResultObjectLocation(*S);
762 Loc.setChild(*Field, &Env.createObject(Field->getType(), Init));
770 Value *Val = Env.getValue(*Init);
774 &Env.getOrCreateNullPointerValue(Init->getType()->getPointeeType());
776 Val = Env.createValue(Field->getType());
778 Env.setValue(*FieldLoc, *Val);
784 Env.initializeFieldsWithValues(*cast<RecordStorageLocation>(FieldLoc));
786 if (Value *Val = Env.createValue(FieldType))
787 Env.setValue(*FieldLoc, *Val);
795 Env.setValue(*S, Env.getBoolLiteralValue(S->getValue()));
799 Env.setValue(*S, Env.getIntLiteralValue(S->getValue()));
836 if (Env.getValue(SubExpr) == nullptr)
838 if (auto *Val = dyn_cast_or_null<BoolValue>(Env.getValue(SubExpr)))
843 return Env.makeAtomicBoolValue();
850 const auto &Options = Env.getDataflowAnalysisContext().getOptions();
852 Env.canDescend(Options.ContextSensitiveOpts->Depth, F)))
855 const AdornedCFG *ACFG = Env.getDataflowAnalysisContext().getAdornedCFG(F);
865 auto CalleeEnv = Env.pushCall(S);
881 Env.popCall(S, ExitState->Env);
885 Environment &Env;
891 void transfer(const StmtToEnvMap &StmtToEnv, const Stmt &S, Environment &Env,
893 TransferVisitor(StmtToEnv, Env, Model).Visit(&S);