Lines Matching refs:Call

44     : public Checker<eval::Call, check::DeadSymbols, check::RegionChanges,
47 bool isBoolConversionMethod(const CallEvent &Call) const;
52 bool evalCall(const CallEvent &Call, CheckerContext &C) const;
59 const LocationContext *LCtx, const CallEvent *Call) const;
65 void handleReset(const CallEvent &Call, CheckerContext &C) const;
66 void handleRelease(const CallEvent &Call, CheckerContext &C) const;
67 void handleSwapMethod(const CallEvent &Call, CheckerContext &C) const;
68 void handleGet(const CallEvent &Call, CheckerContext &C) const;
69 bool handleAssignOp(const CallEvent &Call, CheckerContext &C) const;
70 bool handleMoveCtr(const CallEvent &Call, CheckerContext &C,
74 const CallEvent &Call) const;
75 void handleBoolConversion(const CallEvent &Call, CheckerContext &C) const;
76 bool handleComparisionOp(const CallEvent &Call, CheckerContext &C) const;
77 bool handleOstreamOperator(const CallEvent &Call, CheckerContext &C) const;
86 void (SmartPtrModeling::*)(const CallEvent &Call, CheckerContext &) const;
126 bool isStdSmartPtrCall(const CallEvent &Call) { in isStdSmartPtrCall() argument
127 const auto *MethodDecl = dyn_cast_or_null<CXXMethodDecl>(Call.getDecl()); in isStdSmartPtrCall()
200 static QualType getPointerTypeFromTemplateArg(const CallEvent &Call, in getPointerTypeFromTemplateArg() argument
202 const auto *FD = dyn_cast_or_null<FunctionDecl>(Call.getDecl()); in getPointerTypeFromTemplateArg()
214 static QualType getInnerPointerType(const CallEvent &Call, CheckerContext &C) { in getInnerPointerType() argument
215 const auto *MethodDecl = dyn_cast_or_null<CXXMethodDecl>(Call.getDecl()); in getInnerPointerType()
232 bool SmartPtrModeling::isBoolConversionMethod(const CallEvent &Call) const { in isBoolConversionMethod()
237 const auto *CD = dyn_cast_or_null<CXXConversionDecl>(Call.getDecl()); in isBoolConversionMethod()
248 static bool isStdFunctionCall(const CallEvent &Call) { in isStdFunctionCall() argument
249 return Call.getDecl() && Call.getDecl()->getDeclContext()->isStdNamespace(); in isStdFunctionCall()
252 bool isStdOstreamOperatorCall(const CallEvent &Call) { in isStdOstreamOperatorCall() argument
253 if (Call.getNumArgs() != 2 || !isStdFunctionCall(Call)) in isStdOstreamOperatorCall()
255 const auto *FC = dyn_cast<SimpleFunctionCall>(&Call); in isStdOstreamOperatorCall()
264 return isStdSmartPtr(Call.getArgExpr(1)) && in isStdOstreamOperatorCall()
265 isStdBasicOstream(Call.getArgExpr(0)); in isStdOstreamOperatorCall()
268 static bool isPotentiallyComparisionOpCall(const CallEvent &Call) { in isPotentiallyComparisionOpCall() argument
269 if (Call.getNumArgs() != 2 || !isStdFunctionCall(Call)) in isPotentiallyComparisionOpCall()
271 return smartptr::isStdSmartPtr(Call.getArgExpr(0)) || in isPotentiallyComparisionOpCall()
272 smartptr::isStdSmartPtr(Call.getArgExpr(1)); in isPotentiallyComparisionOpCall()
275 bool SmartPtrModeling::evalCall(const CallEvent &Call, in evalCall() argument
282 if (ModelSmartPtrDereference && isPotentiallyComparisionOpCall(Call)) in evalCall()
283 if (handleComparisionOp(Call, C)) in evalCall()
286 if (ModelSmartPtrDereference && isStdOstreamOperatorCall(Call)) in evalCall()
287 return handleOstreamOperator(Call, C); in evalCall()
289 if (StdSwapCall.matches(Call)) { in evalCall()
291 assert(Call.getNumArgs() == 2 && "std::swap should have two arguments"); in evalCall()
292 const Expr *FirstArg = Call.getArgExpr(0); in evalCall()
295 return handleSwap(State, Call.getArgSVal(0), Call.getArgSVal(1), C); in evalCall()
298 if (matchesAny(Call, StdMakeUniqueCall, StdMakeUniqueForOverwriteCall)) { in evalCall()
302 const Optional<SVal> ThisRegionOpt = Call.getReturnValueUnderConstruction(); in evalCall()
307 Call.getOriginExpr(), C.getLocationContext(), in evalCall()
308 getPointerTypeFromTemplateArg(Call, C), C.blockCount()); in evalCall()
333 Call.getConstructionContext(), {}); in evalCall()
341 if (!smartptr::isStdSmartPtrCall(Call)) in evalCall()
344 if (isBoolConversionMethod(Call)) { in evalCall()
346 cast<CXXInstanceCall>(&Call)->getCXXThisVal().getAsRegion(); in evalCall()
353 handleBoolConversion(Call, C); in evalCall()
364 Call.getOriginExpr(), C.getLocationContext(), in evalCall()
365 C.getSValBuilder().makeZeroVal(Call.getResultType()))); in evalCall()
374 if (const auto *CC = dyn_cast<CXXConstructorCall>(&Call)) { in evalCall()
382 QualType ThisType = cast<CXXMethodDecl>(Call.getDecl())->getThisType(); in evalCall()
385 return handleMoveCtr(Call, C, ThisRegion); in evalCall()
387 if (Call.getNumArgs() == 0) { in evalCall()
402 const auto *TrackingExpr = Call.getArgExpr(0); in evalCall()
405 auto ArgVal = Call.getArgSVal(0); in evalCall()
426 if (handleAssignOp(Call, C)) in evalCall()
429 const SmartPtrMethodHandlerFn *Handler = SmartPtrMethodHandlers.lookup(Call); in evalCall()
432 (this->**Handler)(Call, C); in evalCall()
449 bool SmartPtrModeling::handleComparisionOp(const CallEvent &Call, in handleComparisionOp() argument
451 const auto *FC = dyn_cast<SimpleFunctionCall>(&Call); in handleComparisionOp()
481 SVal First = Call.getArgSVal(0); in handleComparisionOp()
482 SVal Second = Call.getArgSVal(1); in handleComparisionOp()
483 const auto *FirstExpr = Call.getArgExpr(0); in handleComparisionOp()
484 const auto *SecondExpr = Call.getArgExpr(1); in handleComparisionOp()
486 const auto *ResultExpr = Call.getOriginExpr(); in handleComparisionOp()
497 Call.getResultType()); in handleComparisionOp()
515 bool SmartPtrModeling::handleOstreamOperator(const CallEvent &Call, in handleOstreamOperator() argument
526 const auto StreamVal = Call.getArgSVal(0); in handleOstreamOperator()
531 State->invalidateRegions({StreamThisRegion}, Call.getOriginExpr(), in handleOstreamOperator()
534 State->BindExpr(Call.getOriginExpr(), C.getLocationContext(), StreamVal); in handleOstreamOperator()
575 const CallEvent *Call) const { in checkRegionChanges()
597 void SmartPtrModeling::handleReset(const CallEvent &Call, in handleReset() argument
600 const auto *IC = dyn_cast<CXXInstanceCall>(&Call); in handleReset()
608 assert(Call.getArgExpr(0)->getType()->isPointerType() && in handleReset()
610 State = State->set<TrackedRegionMap>(ThisRegion, Call.getArgSVal(0)); in handleReset()
611 const auto *TrackingExpr = Call.getArgExpr(0); in handleReset()
627 void SmartPtrModeling::handleRelease(const CallEvent &Call, in handleRelease() argument
630 const auto *IC = dyn_cast<CXXInstanceCall>(&Call); in handleRelease()
641 State = State->BindExpr(Call.getOriginExpr(), C.getLocationContext(), in handleRelease()
645 QualType ThisType = cast<CXXMethodDecl>(Call.getDecl())->getThisType(); in handleRelease()
663 void SmartPtrModeling::handleSwapMethod(const CallEvent &Call, in handleSwapMethod() argument
666 const auto *IC = dyn_cast<CXXInstanceCall>(&Call); in handleSwapMethod()
671 handleSwap(State, IC->getCXXThisVal(), Call.getArgSVal(0), C); in handleSwapMethod()
711 void SmartPtrModeling::handleGet(const CallEvent &Call, in handleGet() argument
714 const auto *IC = dyn_cast<CXXInstanceCall>(&Call); in handleGet()
724 State, ThisRegion, Call.getOriginExpr(), Call.getResultType(), C); in handleGet()
725 State = State->BindExpr(Call.getOriginExpr(), C.getLocationContext(), in handleGet()
731 bool SmartPtrModeling::handleAssignOp(const CallEvent &Call, in handleAssignOp() argument
734 const auto *OC = dyn_cast<CXXMemberOperatorCall>(&Call); in handleAssignOp()
744 QualType ThisType = cast<CXXMethodDecl>(Call.getDecl())->getThisType(); in handleAssignOp()
749 bool AssignedNull = Call.getArgSVal(0).isZeroConstant(); in handleAssignOp()
766 return updateMovedSmartPointers(C, ThisRegion, OtherSmartPtrRegion, Call); in handleAssignOp()
769 bool SmartPtrModeling::handleMoveCtr(const CallEvent &Call, CheckerContext &C, in handleMoveCtr() argument
771 const auto *OtherSmartPtrRegion = Call.getArgSVal(0).getAsRegion(); in handleMoveCtr()
775 return updateMovedSmartPointers(C, ThisRegion, OtherSmartPtrRegion, Call); in handleMoveCtr()
780 const MemRegion *OtherSmartPtrRegion, const CallEvent &Call) const { in updateMovedSmartPointers()
782 QualType ThisType = cast<CXXMethodDecl>(Call.getDecl())->getThisType(); in updateMovedSmartPointers()
833 void SmartPtrModeling::handleBoolConversion(const CallEvent &Call, in handleBoolConversion() argument
837 const Expr *CallExpr = Call.getOriginExpr(); in handleBoolConversion()
839 cast<CXXInstanceCall>(&Call)->getCXXThisVal().getAsRegion(); in handleBoolConversion()
841 QualType ThisType = cast<CXXMethodDecl>(Call.getDecl())->getThisType(); in handleBoolConversion()
849 auto InnerPointerType = getInnerPointerType(Call, C); in handleBoolConversion()
874 C.getSValBuilder().makeZeroVal(Call.getResultType()))); in handleBoolConversion()