Lines Matching refs:S
42 const Environment *StmtToEnvMap::getEnvironment(const Stmt &S) const { in getEnvironment()
43 auto BlockIt = ACFG.getStmtToBlock().find(&ignoreCFGOmittedNodes(S)); in getEnvironment()
143 void VisitBinaryOperator(const BinaryOperator *S) { in VisitBinaryOperator() argument
144 const Expr *LHS = S->getLHS(); in VisitBinaryOperator()
147 const Expr *RHS = S->getRHS(); in VisitBinaryOperator()
154 if (S->isCompoundAssignmentOp()) in VisitBinaryOperator()
155 propagateStorageLocation(*S->getLHS(), *S, Env); in VisitBinaryOperator()
157 switch (S->getOpcode()) { in VisitBinaryOperator()
171 Env.setStorageLocation(*S, *LHSLoc); in VisitBinaryOperator()
179 if (S->getOpcode() == BO_LAnd) in VisitBinaryOperator()
180 Env.setValue(*S, Env.makeAnd(LHSVal, RHSVal)); in VisitBinaryOperator()
182 Env.setValue(*S, Env.makeOr(LHSVal, RHSVal)); in VisitBinaryOperator()
188 Env.setValue(*S, S->getOpcode() == BO_EQ ? LHSEqRHSValue in VisitBinaryOperator()
193 propagateValueOrStorageLocation(*RHS, *S, Env); in VisitBinaryOperator()
201 void VisitDeclRefExpr(const DeclRefExpr *S) { in VisitDeclRefExpr() argument
202 const ValueDecl *VD = S->getDecl(); in VisitDeclRefExpr()
214 if (!S->isGLValue()) in VisitDeclRefExpr()
221 Env.setStorageLocation(*S, *DeclLoc); in VisitDeclRefExpr()
224 void VisitDeclStmt(const DeclStmt *S) { in VisitDeclStmt() argument
227 const auto &D = *cast<VarDecl>(S->getSingleDecl()); in VisitDeclStmt()
285 void VisitImplicitCastExpr(const ImplicitCastExpr *S) { in VisitImplicitCastExpr() argument
286 const Expr *SubExpr = S->getSubExpr(); in VisitImplicitCastExpr()
289 switch (S->getCastKind()) { in VisitImplicitCastExpr()
296 Env.setValue(*S, *SubExprVal); in VisitImplicitCastExpr()
300 Env.setValue(*S, Env.makeAtomicBoolValue()); in VisitImplicitCastExpr()
311 Env.setValue(*S, *SubExprVal); in VisitImplicitCastExpr()
330 propagateValueOrStorageLocation(*SubExpr, *S, Env); in VisitImplicitCastExpr()
335 Env.getOrCreateNullPointerValue(S->getType()->getPointeeType()); in VisitImplicitCastExpr()
336 Env.setValue(*S, NullPointerVal); in VisitImplicitCastExpr()
348 Env.setValue(*S, Env.create<PointerValue>(*PointeeLoc)); in VisitImplicitCastExpr()
362 void VisitUnaryOperator(const UnaryOperator *S) { in VisitUnaryOperator() argument
363 const Expr *SubExpr = S->getSubExpr(); in VisitUnaryOperator()
366 switch (S->getOpcode()) { in VisitUnaryOperator()
372 Env.setStorageLocation(*S, SubExprVal->getPointeeLoc()); in VisitUnaryOperator()
377 if (S->getType()->isMemberPointerType()) in VisitUnaryOperator()
381 Env.setValue(*S, Env.create<PointerValue>(*PointeeLoc)); in VisitUnaryOperator()
389 Env.setValue(*S, Env.makeNot(*SubExprVal)); in VisitUnaryOperator()
398 propagateStorageLocation(*S->getSubExpr(), *S, Env); in VisitUnaryOperator()
399 if (StorageLocation *Loc = Env.getStorageLocation(*S->getSubExpr())) in VisitUnaryOperator()
407 propagateValue(*S->getSubExpr(), *S, Env); in VisitUnaryOperator()
408 if (StorageLocation *Loc = Env.getStorageLocation(*S->getSubExpr())) in VisitUnaryOperator()
416 void VisitCXXThisExpr(const CXXThisExpr *S) { in VisitCXXThisExpr() argument
423 Env.setValue(*S, Env.create<PointerValue>(*ThisPointeeLoc)); in VisitCXXThisExpr()
426 void VisitCXXNewExpr(const CXXNewExpr *S) { in VisitCXXNewExpr() argument
427 if (Value *Val = Env.createValue(S->getType())) in VisitCXXNewExpr()
428 Env.setValue(*S, *Val); in VisitCXXNewExpr()
431 void VisitCXXDeleteExpr(const CXXDeleteExpr *S) { in VisitCXXDeleteExpr() argument
438 void VisitReturnStmt(const ReturnStmt *S) { in VisitReturnStmt() argument
442 auto *Ret = S->getRetValue(); in VisitReturnStmt()
466 void VisitMemberExpr(const MemberExpr *S) { in VisitMemberExpr() argument
467 ValueDecl *Member = S->getMemberDecl(); in VisitMemberExpr()
484 Env.setStorageLocation(*S, *VarDeclLoc); in VisitMemberExpr()
489 RecordStorageLocation *BaseLoc = getBaseObjectLocation(*S, Env); in VisitMemberExpr()
496 Env.setStorageLocation(*S, *MemberLoc); in VisitMemberExpr()
499 void VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *S) { in VisitCXXDefaultArgExpr() argument
500 const Expr *ArgExpr = S->getExpr(); in VisitCXXDefaultArgExpr()
502 propagateValueOrStorageLocation(*ArgExpr, *S, Env); in VisitCXXDefaultArgExpr()
504 if (S->isPRValue() && S->getType()->isRecordType()) { in VisitCXXDefaultArgExpr()
505 auto &Loc = Env.getResultObjectLocation(*S); in VisitCXXDefaultArgExpr()
510 void VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *S) { in VisitCXXDefaultInitExpr() argument
511 const Expr *InitExpr = S->getExpr(); in VisitCXXDefaultInitExpr()
517 if (S->getType()->isRecordType() && S->isPRValue()) in VisitCXXDefaultInitExpr()
520 propagateValueOrStorageLocation(*InitExpr, *S, Env); in VisitCXXDefaultInitExpr()
523 void VisitCXXConstructExpr(const CXXConstructExpr *S) { in VisitCXXConstructExpr() argument
524 const CXXConstructorDecl *ConstructorDecl = S->getConstructor(); in VisitCXXConstructExpr()
530 if (!S->getType()->isRecordType()) { in VisitCXXConstructExpr()
531 transferInlineCall(S, ConstructorDecl); in VisitCXXConstructExpr()
535 RecordStorageLocation &Loc = Env.getResultObjectLocation(*S); in VisitCXXConstructExpr()
540 assert(S->getNumArgs() != 0); in VisitCXXConstructExpr()
542 const Expr *Arg = S->getArg(0); in VisitCXXConstructExpr()
556 Env.initializeFieldsWithValues(Loc, S->getType()); in VisitCXXConstructExpr()
558 transferInlineCall(S, ConstructorDecl); in VisitCXXConstructExpr()
561 void VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *S) { in VisitCXXOperatorCallExpr() argument
562 if (S->getOperator() == OO_Equal) { in VisitCXXOperatorCallExpr()
563 assert(S->getNumArgs() == 2); in VisitCXXOperatorCallExpr()
565 const Expr *Arg0 = S->getArg(0); in VisitCXXOperatorCallExpr()
568 const Expr *Arg1 = S->getArg(1); in VisitCXXOperatorCallExpr()
573 dyn_cast_or_null<CXXMethodDecl>(S->getDirectCallee()); in VisitCXXOperatorCallExpr()
596 if (S->getType().getCanonicalType().getUnqualifiedType() != in VisitCXXOperatorCallExpr()
598 auto ReturnDecl = S->getType()->getAsCXXRecordDecl(); in VisitCXXOperatorCallExpr()
606 if (S->isGLValue()) in VisitCXXOperatorCallExpr()
607 Env.setStorageLocation(*S, *LocDst); in VisitCXXOperatorCallExpr()
609 copyRecord(*LocDst, Env.getResultObjectLocation(*S), Env); in VisitCXXOperatorCallExpr()
616 VisitCallExpr(S); in VisitCXXOperatorCallExpr()
623 void VisitCallExpr(const CallExpr *S) { in VisitCallExpr() argument
627 if (S->isCallToStdMove()) { in VisitCallExpr()
628 assert(S->getNumArgs() == 1); in VisitCallExpr()
630 const Expr *Arg = S->getArg(0); in VisitCallExpr()
637 Env.setStorageLocation(*S, *ArgLoc); in VisitCallExpr()
638 } else if (S->getDirectCallee() != nullptr && in VisitCallExpr()
639 S->getDirectCallee()->getBuiltinID() == in VisitCallExpr()
641 assert(S->getNumArgs() > 0); in VisitCallExpr()
642 assert(S->getArg(0) != nullptr); in VisitCallExpr()
643 auto *ArgVal = Env.getValue(*S->getArg(0)); in VisitCallExpr()
646 Env.setValue(*S, *ArgVal); in VisitCallExpr()
647 } else if (const FunctionDecl *F = S->getDirectCallee()) { in VisitCallExpr()
648 transferInlineCall(S, F); in VisitCallExpr()
652 if (S->getType()->isRecordType() && S->isPRValue()) { in VisitCallExpr()
653 RecordStorageLocation &Loc = Env.getResultObjectLocation(*S); in VisitCallExpr()
659 void VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *S) { in VisitMaterializeTemporaryExpr() argument
660 const Expr *SubExpr = S->getSubExpr(); in VisitMaterializeTemporaryExpr()
663 StorageLocation &Loc = Env.createStorageLocation(*S); in VisitMaterializeTemporaryExpr()
664 Env.setStorageLocation(*S, Loc); in VisitMaterializeTemporaryExpr()
675 void VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *S) { in VisitCXXBindTemporaryExpr() argument
676 const Expr *SubExpr = S->getSubExpr(); in VisitCXXBindTemporaryExpr()
679 propagateValue(*SubExpr, *S, Env); in VisitCXXBindTemporaryExpr()
682 void VisitCXXStaticCastExpr(const CXXStaticCastExpr *S) { in VisitCXXStaticCastExpr() argument
683 if (S->getCastKind() == CK_NoOp) { in VisitCXXStaticCastExpr()
684 const Expr *SubExpr = S->getSubExpr(); in VisitCXXStaticCastExpr()
687 propagateValueOrStorageLocation(*SubExpr, *S, Env); in VisitCXXStaticCastExpr()
691 void VisitConditionalOperator(const ConditionalOperator *S) { in VisitConditionalOperator() argument
692 const Environment *TrueEnv = StmtToEnv.getEnvironment(*S->getTrueExpr()); in VisitConditionalOperator()
693 const Environment *FalseEnv = StmtToEnv.getEnvironment(*S->getFalseExpr()); in VisitConditionalOperator()
703 if (S->isGLValue()) { in VisitConditionalOperator()
704 StorageLocation *TrueLoc = TrueEnv->getStorageLocation(*S->getTrueExpr()); in VisitConditionalOperator()
706 FalseEnv->getStorageLocation(*S->getFalseExpr()); in VisitConditionalOperator()
708 Env.setStorageLocation(*S, *TrueLoc); in VisitConditionalOperator()
709 } else if (!S->getType()->isRecordType()) { in VisitConditionalOperator()
726 S->getType(), TrueEnv->getValue(*S->getTrueExpr()), *TrueEnv, in VisitConditionalOperator()
727 FalseEnv->getValue(*S->getFalseExpr()), *FalseEnv, Env, Model)) in VisitConditionalOperator()
728 Env.setValue(*S, *Val); in VisitConditionalOperator()
732 void VisitInitListExpr(const InitListExpr *S) { in VisitInitListExpr() argument
733 QualType Type = S->getType(); in VisitInitListExpr()
738 if (!Type->isArrayType() && S->getNumInits() == 1) in VisitInitListExpr()
739 propagateValueOrStorageLocation(*S->getInit(0), *S, Env); in VisitInitListExpr()
744 if (S->isSemanticForm() && S->isTransparent()) in VisitInitListExpr()
747 RecordStorageLocation &Loc = Env.getResultObjectLocation(*S); in VisitInitListExpr()
754 RecordInitListHelper InitListHelper(S); in VisitInitListExpr()
794 void VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *S) { in VisitCXXBoolLiteralExpr() argument
795 Env.setValue(*S, Env.getBoolLiteralValue(S->getValue())); in VisitCXXBoolLiteralExpr()
798 void VisitIntegerLiteral(const IntegerLiteral *S) { in VisitIntegerLiteral() argument
799 Env.setValue(*S, Env.getIntLiteralValue(S->getValue())); in VisitIntegerLiteral()
802 void VisitParenExpr(const ParenExpr *S) { in VisitParenExpr() argument
806 auto *SubExpr = S->getSubExpr(); in VisitParenExpr()
811 void VisitExprWithCleanups(const ExprWithCleanups *S) { in VisitExprWithCleanups() argument
815 auto *SubExpr = S->getSubExpr(); in VisitExprWithCleanups()
849 void transferInlineCall(const E *S, const FunctionDecl *F) { in transferInlineCall() argument
865 auto CalleeEnv = Env.pushCall(S); in transferInlineCall()
881 Env.popCall(S, ExitState->Env); in transferInlineCall()
891 void transfer(const StmtToEnvMap &StmtToEnv, const Stmt &S, Environment &Env, in transfer() argument
893 TransferVisitor(StmtToEnv, Env, Model).Visit(&S); in transfer()