Lines Matching refs:Call

276   void checkPreCall(const CallEvent &Call, CheckerContext &C) const;
277 void checkPostCall(const CallEvent &Call, CheckerContext &C) const;
412 void IteratorChecker::checkPreCall(const CallEvent &Call, in checkPreCall() argument
416 const auto *Func = dyn_cast_or_null<FunctionDecl>(Call.getDecl()); in checkPreCall()
424 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPreCall()
427 verifyAccess(C, Call.getArgSVal(0)); in checkPreCall()
433 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPreCall()
436 if (Call.getNumArgs() >= 1) { in checkPreCall()
437 verifyIncrement(C, Call.getArgSVal(0)); in checkPreCall()
442 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPreCall()
445 if (Call.getNumArgs() >= 1) { in checkPreCall()
446 verifyDecrement(C, Call.getArgSVal(0)); in checkPreCall()
450 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPreCall()
452 if (Call.getNumArgs() >= 1) { in checkPreCall()
455 Call.getArgSVal(0)); in checkPreCall()
458 if (Call.getNumArgs() >= 2) { in checkPreCall()
460 Call.getArgSVal(0), Call.getArgSVal(1)); in checkPreCall()
465 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPreCall()
468 verifyDereference(C, Call.getArgSVal(0)); in checkPreCall()
474 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPreCall()
475 if (Call.getNumArgs() < 1) in checkPreCall()
479 !isIteratorType(Call.getArgExpr(0)->getType())) in checkPreCall()
482 verifyMatch(C, InstCall->getCXXThisVal(), Call.getArgSVal(0)); in checkPreCall()
484 if (Call.getNumArgs() < 2) in checkPreCall()
487 if (!isIteratorType(Call.getArgExpr(0)->getType()) || in checkPreCall()
488 !isIteratorType(Call.getArgExpr(1)->getType())) in checkPreCall()
491 verifyMatch(C, Call.getArgSVal(0), Call.getArgSVal(1)); in checkPreCall()
494 } else if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPreCall()
503 verifyMatch(C, Call.getArgSVal(0), in checkPreCall()
505 if (Call.getNumArgs() == 2) { in checkPreCall()
506 verifyMatch(C, Call.getArgSVal(1), in checkPreCall()
510 verifyMatch(C, Call.getArgSVal(0), in checkPreCall()
512 if (Call.getNumArgs() == 3 && in checkPreCall()
513 isIteratorType(Call.getArgExpr(1)->getType()) && in checkPreCall()
514 isIteratorType(Call.getArgExpr(2)->getType())) { in checkPreCall()
515 verifyMatch(C, Call.getArgSVal(1), Call.getArgSVal(2)); in checkPreCall()
518 verifyMatch(C, Call.getArgSVal(0), in checkPreCall()
521 } else if (isa<CXXConstructorCall>(&Call)) { in checkPreCall()
523 if (Call.getNumArgs() < 2) in checkPreCall()
526 const auto *Ctr = cast<CXXConstructorDecl>(Call.getDecl()); in checkPreCall()
534 if (!isIteratorType(Call.getArgExpr(0)->getType()) || in checkPreCall()
535 !isIteratorType(Call.getArgExpr(1)->getType())) in checkPreCall()
538 verifyMatch(C, Call.getArgSVal(0), Call.getArgSVal(1)); in checkPreCall()
592 LHS = Call.getArgSVal(J); in checkPreCall()
594 verifyMatch(C, LHS, Call.getArgSVal(J)); in checkPreCall()
601 void IteratorChecker::checkPostCall(const CallEvent &Call, in checkPostCall() argument
604 const auto *Func = dyn_cast_or_null<FunctionDecl>(Call.getDecl()); in checkPostCall()
611 const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call); in checkPostCall()
613 handleAssign(C, InstCall->getCXXThisVal(), Call.getOriginExpr(), in checkPostCall()
614 Call.getArgSVal(0)); in checkPostCall()
619 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPostCall()
620 handleComparison(C, Call.getReturnValue(), InstCall->getCXXThisVal(), in checkPostCall()
621 Call.getArgSVal(0), Op); in checkPostCall()
623 handleComparison(C, Call.getReturnValue(), Call.getArgSVal(0), in checkPostCall()
624 Call.getArgSVal(1), Op); in checkPostCall()
627 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPostCall()
628 if (Call.getNumArgs() >= 1) { in checkPostCall()
630 Call.getReturnValue(), in checkPostCall()
631 InstCall->getCXXThisVal(), Call.getArgSVal(0)); in checkPostCall()
634 if (Call.getNumArgs() >= 2) { in checkPostCall()
636 Call.getReturnValue(), Call.getArgSVal(0), in checkPostCall()
637 Call.getArgSVal(1)); in checkPostCall()
641 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPostCall()
642 handleIncrement(C, Call.getReturnValue(), InstCall->getCXXThisVal(), in checkPostCall()
643 Call.getNumArgs()); in checkPostCall()
645 handleIncrement(C, Call.getReturnValue(), Call.getArgSVal(0), in checkPostCall()
646 Call.getNumArgs()); in checkPostCall()
649 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPostCall()
650 handleDecrement(C, Call.getReturnValue(), InstCall->getCXXThisVal(), in checkPostCall()
651 Call.getNumArgs()); in checkPostCall()
653 handleDecrement(C, Call.getReturnValue(), Call.getArgSVal(0), in checkPostCall()
654 Call.getNumArgs()); in checkPostCall()
658 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPostCall()
672 handleInsert(C, Call.getArgSVal(0)); in checkPostCall()
674 if (Call.getNumArgs() == 1) { in checkPostCall()
675 handleErase(C, Call.getArgSVal(0)); in checkPostCall()
676 } else if (Call.getNumArgs() == 2) { in checkPostCall()
677 handleErase(C, Call.getArgSVal(0), Call.getArgSVal(1)); in checkPostCall()
680 if (Call.getNumArgs() == 1) { in checkPostCall()
681 handleEraseAfter(C, Call.getArgSVal(0)); in checkPostCall()
682 } else if (Call.getNumArgs() == 2) { in checkPostCall()
683 handleEraseAfter(C, Call.getArgSVal(0), Call.getArgSVal(1)); in checkPostCall()
688 const auto *OrigExpr = Call.getOriginExpr(); in checkPostCall()
692 if (!isIteratorType(Call.getResultType())) in checkPostCall()
697 if (const auto *InstCall = dyn_cast<CXXInstanceCall>(&Call)) { in checkPostCall()
699 handleBegin(C, OrigExpr, Call.getReturnValue(), in checkPostCall()
704 handleEnd(C, OrigExpr, Call.getReturnValue(), in checkPostCall()
711 if (getIteratorPosition(State, Call.getReturnValue())) in checkPostCall()
715 if (isa<CXXConstructorCall>(&Call) && Call.getNumArgs() == 1) { in checkPostCall()
716 if (const auto *Pos = getIteratorPosition(State, Call.getArgSVal(0))) { in checkPostCall()
717 State = setIteratorPosition(State, Call.getReturnValue(), *Pos); in checkPostCall()
719 State = removeIteratorPosition(State, Call.getArgSVal(0)); in checkPostCall()
731 for (unsigned i = 0; i < Call.getNumArgs(); ++i) { in checkPostCall()
732 if (isIteratorType(Call.getArgExpr(i)->getType())) { in checkPostCall()
733 if (const auto *Pos = getIteratorPosition(State, Call.getArgSVal(i))) { in checkPostCall()
734 assignToContainer(C, OrigExpr, Call.getReturnValue(), in checkPostCall()