Lines Matching full:env
40 Environment &Env) { in evaluateBooleanEquality() argument
42 dyn_cast_or_null<BoolValue>(Env.getValue(LHS, SkipPast::Reference))) in evaluateBooleanEquality()
44 dyn_cast_or_null<BoolValue>(Env.getValue(RHS, SkipPast::Reference))) in evaluateBooleanEquality()
45 return Env.makeIff(*LHSValue, *RHSValue); in evaluateBooleanEquality()
47 return Env.makeAtomicBoolValue(); in evaluateBooleanEquality()
54 static BoolValue &unpackValue(BoolValue &V, Environment &Env);
57 BoolValue &unpackBinaryBoolValue(Environment &Env, BoolValue &B, M build) { in unpackBinaryBoolValue() argument
61 BoolValue &ULeft = unpackValue(Left, Env); in unpackBinaryBoolValue()
62 BoolValue &URight = unpackValue(Right, Env); in unpackBinaryBoolValue()
67 return (Env.*build)(ULeft, URight); in unpackBinaryBoolValue()
70 static BoolValue &unpackValue(BoolValue &V, Environment &Env) { in unpackValue() argument
83 return Env.makeAtomicBoolValue(); in unpackValue()
88 BoolValue &USub = unpackValue(Sub, Env); in unpackValue()
92 return Env.makeNot(USub); in unpackValue()
95 return unpackBinaryBoolValue<ConjunctionValue>(Env, V, in unpackValue()
98 return unpackBinaryBoolValue<DisjunctionValue>(Env, V, in unpackValue()
102 Env, V, &Environment::makeImplication); in unpackValue()
104 return unpackBinaryBoolValue<BiconditionalValue>(Env, V, in unpackValue()
112 static Value *maybeUnpackLValueExpr(const Expr &E, Environment &Env) { in maybeUnpackLValueExpr() argument
115 auto *Loc = Env.getStorageLocation(E, SkipPast::Reference); in maybeUnpackLValueExpr()
118 auto *Val = Env.getValue(*Loc); in maybeUnpackLValueExpr()
124 auto &UnpackedVal = unpackValue(*B, Env); in maybeUnpackLValueExpr()
127 Env.setValue(*Loc, UnpackedVal); in maybeUnpackLValueExpr()
133 TransferVisitor(const StmtToEnvMap &StmtToEnv, Environment &Env) in TransferVisitor() argument
134 : StmtToEnv(StmtToEnv), Env(Env) {} in TransferVisitor()
145 auto *LHSLoc = Env.getStorageLocation(*LHS, SkipPast::Reference); in VisitBinaryOperator()
149 auto *RHSVal = Env.getValue(*RHS, SkipPast::Reference); in VisitBinaryOperator()
154 Env.setValue(*LHSLoc, *RHSVal); in VisitBinaryOperator()
157 Env.setStorageLocation(*S, *LHSLoc); in VisitBinaryOperator()
165 auto &Loc = Env.createStorageLocation(*S); in VisitBinaryOperator()
166 Env.setStorageLocation(*S, Loc); in VisitBinaryOperator()
168 Env.setValue(Loc, Env.makeAnd(LHSVal, RHSVal)); in VisitBinaryOperator()
170 Env.setValue(Loc, Env.makeOr(LHSVal, RHSVal)); in VisitBinaryOperator()
175 auto &LHSEqRHSValue = evaluateBooleanEquality(*LHS, *RHS, Env); in VisitBinaryOperator()
176 auto &Loc = Env.createStorageLocation(*S); in VisitBinaryOperator()
177 Env.setStorageLocation(*S, Loc); in VisitBinaryOperator()
178 Env.setValue(Loc, S->getOpcode() == BO_EQ ? LHSEqRHSValue in VisitBinaryOperator()
179 : Env.makeNot(LHSEqRHSValue)); in VisitBinaryOperator()
183 if (auto *Loc = Env.getStorageLocation(*RHS, SkipPast::None)) in VisitBinaryOperator()
184 Env.setStorageLocation(*S, *Loc); in VisitBinaryOperator()
195 auto *DeclLoc = Env.getStorageLocation(*VD, SkipPast::None); in VisitDeclRefExpr()
200 assert(isa_and_nonnull<ReferenceValue>(Env.getValue((*DeclLoc))) && in VisitDeclRefExpr()
202 Env.setStorageLocation(*S, *DeclLoc); in VisitDeclRefExpr()
204 auto &Loc = Env.createStorageLocation(*S); in VisitDeclRefExpr()
205 auto &Val = Env.takeOwnership(std::make_unique<ReferenceValue>(*DeclLoc)); in VisitDeclRefExpr()
206 Env.setStorageLocation(*S, Loc); in VisitDeclRefExpr()
207 Env.setValue(Loc, Val); in VisitDeclRefExpr()
223 auto *MaybeLoc = Env.getStorageLocation(D, SkipPast::None); in VisitDeclStmt()
225 MaybeLoc = &Env.createStorageLocation(D); in VisitDeclStmt()
226 Env.setStorageLocation(D, *MaybeLoc); in VisitDeclStmt()
233 if (Value *Val = Env.createValue(D.getType())) in VisitDeclStmt()
234 Env.setValue(Loc, *Val); in VisitDeclStmt()
242 Env.getStorageLocation(*InitExpr, SkipPast::Reference)) { in VisitDeclStmt()
244 Env.takeOwnership(std::make_unique<ReferenceValue>(*InitExprLoc)); in VisitDeclStmt()
245 Env.setValue(Loc, Val); in VisitDeclStmt()
247 } else if (auto *InitExprVal = Env.getValue(*InitExpr, SkipPast::None)) { in VisitDeclStmt()
248 Env.setValue(Loc, *InitExprVal); in VisitDeclStmt()
251 if (Env.getValue(Loc) == nullptr) { in VisitDeclStmt()
263 if (Value *Val = Env.createValue(D.getType())) in VisitDeclStmt()
264 Env.setValue(Loc, *Val); in VisitDeclStmt()
284 if (auto *Loc = Env.getStorageLocation(*ME, SkipPast::Reference)) in VisitDeclStmt()
285 Env.setStorageLocation(*B, *Loc); in VisitDeclStmt()
292 auto &VDLoc = Env.createStorageLocation(*VD); in VisitDeclStmt()
293 Env.setStorageLocation(*VD, VDLoc); in VisitDeclStmt()
294 Env.setStorageLocation(*B, VDLoc); in VisitDeclStmt()
309 auto &Loc = Env.createStorageLocation(*S); in VisitImplicitCastExpr()
310 Env.setStorageLocation(*S, Loc); in VisitImplicitCastExpr()
312 Env.getValue(*SubExpr, SkipPast::Reference))) in VisitImplicitCastExpr()
313 Env.setValue(Loc, *SubExprVal); in VisitImplicitCastExpr()
317 Env.setValue(Loc, Env.makeAtomicBoolValue()); in VisitImplicitCastExpr()
324 auto *SubExprVal = maybeUnpackLValueExpr(*SubExpr, Env); in VisitImplicitCastExpr()
328 auto &ExprLoc = Env.createStorageLocation(*S); in VisitImplicitCastExpr()
329 Env.setStorageLocation(*S, ExprLoc); in VisitImplicitCastExpr()
330 Env.setValue(ExprLoc, *SubExprVal); in VisitImplicitCastExpr()
349 auto *SubExprLoc = Env.getStorageLocation(*SubExpr, SkipPast::None); in VisitImplicitCastExpr()
353 Env.setStorageLocation(*S, *SubExprLoc); in VisitImplicitCastExpr()
358 auto &Loc = Env.createStorageLocation(S->getType()); in VisitImplicitCastExpr()
359 Env.setStorageLocation(*S, Loc); in VisitImplicitCastExpr()
362 Env.getOrCreateNullPointerValue(S->getType()->getPointeeType()); in VisitImplicitCastExpr()
363 Env.setValue(Loc, NullPointerVal); in VisitImplicitCastExpr()
379 Env.getValue(*SubExpr, SkipPast::Reference)); in VisitUnaryOperator()
383 auto &Loc = Env.createStorageLocation(*S); in VisitUnaryOperator()
384 Env.setStorageLocation(*S, Loc); in VisitUnaryOperator()
385 Env.setValue(Loc, Env.takeOwnership(std::make_unique<ReferenceValue>( in VisitUnaryOperator()
394 Env.getStorageLocation(*SubExpr, SkipPast::Reference); in VisitUnaryOperator()
398 auto &PointerLoc = Env.createStorageLocation(*S); in VisitUnaryOperator()
400 Env.takeOwnership(std::make_unique<PointerValue>(*PointeeLoc)); in VisitUnaryOperator()
401 Env.setStorageLocation(*S, PointerLoc); in VisitUnaryOperator()
402 Env.setValue(PointerLoc, PointerVal); in VisitUnaryOperator()
407 dyn_cast_or_null<BoolValue>(Env.getValue(*SubExpr, SkipPast::None)); in VisitUnaryOperator()
411 auto &ExprLoc = Env.createStorageLocation(*S); in VisitUnaryOperator()
412 Env.setStorageLocation(*S, ExprLoc); in VisitUnaryOperator()
413 Env.setValue(ExprLoc, Env.makeNot(*SubExprVal)); in VisitUnaryOperator()
422 auto *ThisPointeeLoc = Env.getThisPointeeStorageLocation(); in VisitCXXThisExpr()
428 auto &Loc = Env.createStorageLocation(*S); in VisitCXXThisExpr()
429 Env.setStorageLocation(*S, Loc); in VisitCXXThisExpr()
430 Env.setValue(Loc, Env.takeOwnership( in VisitCXXThisExpr()
435 if (!Env.getAnalysisOptions().ContextSensitiveOpts) in VisitReturnStmt()
442 auto *Val = Env.getValue(*Ret, SkipPast::None); in VisitReturnStmt()
450 auto *Loc = Env.getReturnStorageLocation(); in VisitReturnStmt()
457 Env.setValue(*Loc, *Val); in VisitReturnStmt()
474 auto *VarDeclLoc = Env.getStorageLocation(*D, SkipPast::None); in VisitMemberExpr()
479 assert(isa_and_nonnull<ReferenceValue>(Env.getValue((*VarDeclLoc))) && in VisitMemberExpr()
481 Env.setStorageLocation(*S, *VarDeclLoc); in VisitMemberExpr()
483 auto &Loc = Env.createStorageLocation(*S); in VisitMemberExpr()
484 Env.setStorageLocation(*S, Loc); in VisitMemberExpr()
485 Env.setValue(Loc, Env.takeOwnership( in VisitMemberExpr()
495 Env.getStorageLocation(*S->getBase(), SkipPast::ReferenceThenPointer)); in VisitMemberExpr()
512 if (auto *V = Env.getValue(MemberLoc)) { in VisitMemberExpr()
515 Env.setStorageLocation(*S, MemberLoc); in VisitMemberExpr()
518 auto &Loc = Env.createStorageLocation(*S); in VisitMemberExpr()
519 Env.setStorageLocation(*S, Loc); in VisitMemberExpr()
520 Env.setValue( in VisitMemberExpr()
521 Loc, Env.takeOwnership(std::make_unique<ReferenceValue>(MemberLoc))); in VisitMemberExpr()
529 Value *InitExprVal = Env.getValue(*InitExpr, SkipPast::None); in VisitCXXDefaultInitExpr()
537 *cast<AggregateStorageLocation>(Env.getThisPointeeStorageLocation()); in VisitCXXDefaultInitExpr()
539 Env.setValue(FieldLoc, *InitExprVal); in VisitCXXDefaultInitExpr()
553 auto *ArgLoc = Env.getStorageLocation(*Arg, SkipPast::Reference); in VisitCXXConstructExpr()
557 Env.setStorageLocation(*S, *ArgLoc); in VisitCXXConstructExpr()
558 } else if (auto *ArgVal = Env.getValue(*Arg, SkipPast::Reference)) { in VisitCXXConstructExpr()
559 auto &Loc = Env.createStorageLocation(*S); in VisitCXXConstructExpr()
560 Env.setStorageLocation(*S, Loc); in VisitCXXConstructExpr()
561 Env.setValue(Loc, *ArgVal); in VisitCXXConstructExpr()
566 auto &Loc = Env.createStorageLocation(*S); in VisitCXXConstructExpr()
567 Env.setStorageLocation(*S, Loc); in VisitCXXConstructExpr()
568 if (Value *Val = Env.createValue(S->getType())) in VisitCXXConstructExpr()
569 Env.setValue(Loc, *Val); in VisitCXXConstructExpr()
590 auto *ObjectLoc = Env.getStorageLocation(*Arg0, SkipPast::Reference); in VisitCXXOperatorCallExpr()
594 auto *Val = Env.getValue(*Arg1, SkipPast::Reference); in VisitCXXOperatorCallExpr()
599 Env.setValue(*ObjectLoc, *Val); in VisitCXXOperatorCallExpr()
603 Env.setStorageLocation(*S, *ObjectLoc); in VisitCXXOperatorCallExpr()
612 auto *SubExprLoc = Env.getStorageLocation(*SubExpr, SkipPast::None); in VisitCXXFunctionalCastExpr()
616 Env.setStorageLocation(*S, *SubExprLoc); in VisitCXXFunctionalCastExpr()
621 auto &Loc = Env.createStorageLocation(*S); in VisitCXXTemporaryObjectExpr()
622 Env.setStorageLocation(*S, Loc); in VisitCXXTemporaryObjectExpr()
623 if (Value *Val = Env.createValue(S->getType())) in VisitCXXTemporaryObjectExpr()
624 Env.setValue(Loc, *Val); in VisitCXXTemporaryObjectExpr()
637 auto *ArgLoc = Env.getStorageLocation(*Arg, SkipPast::None); in VisitCallExpr()
641 Env.setStorageLocation(*S, *ArgLoc); in VisitCallExpr()
649 auto *ArgLoc = Env.getStorageLocation(*S->getArg(0), SkipPast::Reference); in VisitCallExpr()
652 Env.setStorageLocation(*S, *ArgLoc); in VisitCallExpr()
662 auto *SubExprLoc = Env.getStorageLocation(*SubExpr, SkipPast::None); in VisitMaterializeTemporaryExpr()
666 Env.setStorageLocation(*S, *SubExprLoc); in VisitMaterializeTemporaryExpr()
673 auto *SubExprLoc = Env.getStorageLocation(*SubExpr, SkipPast::None); in VisitCXXBindTemporaryExpr()
677 Env.setStorageLocation(*S, *SubExprLoc); in VisitCXXBindTemporaryExpr()
685 auto *SubExprLoc = Env.getStorageLocation(*SubExpr, SkipPast::None); in VisitCXXStaticCastExpr()
689 Env.setStorageLocation(*S, *SubExprLoc); in VisitCXXStaticCastExpr()
697 auto &Loc = Env.createStorageLocation(*S); in VisitConditionalOperator()
698 Env.setStorageLocation(*S, Loc); in VisitConditionalOperator()
699 if (Value *Val = Env.createValue(S->getType())) in VisitConditionalOperator()
700 Env.setValue(Loc, *Val); in VisitConditionalOperator()
706 auto &Loc = Env.createStorageLocation(*S); in VisitInitListExpr()
707 Env.setStorageLocation(*S, Loc); in VisitInitListExpr()
709 auto *Val = Env.createValue(Type); in VisitInitListExpr()
713 Env.setValue(Loc, *Val); in VisitInitListExpr()
723 if (Value *InitVal = Env.getValue(*Init, SkipPast::None)) in VisitInitListExpr()
731 auto &Loc = Env.createStorageLocation(*S); in VisitCXXBoolLiteralExpr()
732 Env.setStorageLocation(*S, Loc); in VisitCXXBoolLiteralExpr()
733 Env.setValue(Loc, Env.getBoolLiteralValue(S->getValue())); in VisitCXXBoolLiteralExpr()
765 if (Env.getStorageLocation(SubExpr, SkipPast::None) == nullptr) { in getLogicOperatorSubExprValue()
775 Env.getValue(SubExpr, SkipPast::Reference))) in getLogicOperatorSubExprValue()
780 return Env.makeAtomicBoolValue(); in getLogicOperatorSubExprValue()
787 const auto &Options = Env.getAnalysisOptions(); in transferInlineCall()
789 Env.canDescend(Options.ContextSensitiveOpts->Depth, F))) in transferInlineCall()
792 const ControlFlowContext *CFCtx = Env.getControlFlowContext(F); in transferInlineCall()
806 auto &ReturnLoc = Env.createStorageLocation(*S); in transferInlineCall()
807 Env.setStorageLocation(*S, ReturnLoc); in transferInlineCall()
809 auto CalleeEnv = Env.pushCall(S); in transferInlineCall()
827 Env.popCall(ExitState->Env); in transferInlineCall()
831 Environment &Env; member in clang::dataflow::TransferVisitor
834 void transfer(const StmtToEnvMap &StmtToEnv, const Stmt &S, Environment &Env) { in transfer() argument
835 TransferVisitor(StmtToEnv, Env).Visit(&S); in transfer()