Lines Matching refs:Call

43     : public Checker<eval::Call, check::DeadSymbols, check::RegionChanges,
46 bool isBoolConversionMethod(const CallEvent &Call) const;
51 bool evalCall(const CallEvent &Call, CheckerContext &C) const;
52 void checkPreCall(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 void handleBoolConversion(const CallEvent &Call, CheckerContext &C) const;
75 bool handleComparisionOp(const CallEvent &Call, CheckerContext &C) const;
76 bool handleOstreamOperator(const CallEvent &Call, CheckerContext &C) const;
85 void (SmartPtrModeling::*)(const CallEvent &Call, CheckerContext &) const;
129 bool isStdSmartPtrCall(const CallEvent &Call) { in isStdSmartPtrCall() argument
130 const auto *MethodDecl = dyn_cast_or_null<CXXMethodDecl>(Call.getDecl()); in isStdSmartPtrCall()
203 static QualType getPointerTypeFromTemplateArg(const CallEvent &Call, in getPointerTypeFromTemplateArg() argument
205 const auto *FD = dyn_cast_or_null<FunctionDecl>(Call.getDecl()); in getPointerTypeFromTemplateArg()
217 static QualType getInnerPointerType(const CallEvent &Call, CheckerContext &C) { in getInnerPointerType() argument
218 const auto *MethodDecl = dyn_cast_or_null<CXXMethodDecl>(Call.getDecl()); in getInnerPointerType()
235 bool SmartPtrModeling::isBoolConversionMethod(const CallEvent &Call) const { in isBoolConversionMethod()
240 const auto *CD = dyn_cast_or_null<CXXConversionDecl>(Call.getDecl()); in isBoolConversionMethod()
251 static bool isStdFunctionCall(const CallEvent &Call) { in isStdFunctionCall() argument
252 return Call.getDecl() && Call.getDecl()->getDeclContext()->isStdNamespace(); in isStdFunctionCall()
255 bool isStdOstreamOperatorCall(const CallEvent &Call) { in isStdOstreamOperatorCall() argument
256 if (Call.getNumArgs() != 2 || !isStdFunctionCall(Call)) in isStdOstreamOperatorCall()
258 const auto *FC = dyn_cast<SimpleFunctionCall>(&Call); in isStdOstreamOperatorCall()
267 return isStdSmartPtr(Call.getArgExpr(1)) && in isStdOstreamOperatorCall()
268 isStdBasicOstream(Call.getArgExpr(0)); in isStdOstreamOperatorCall()
271 static bool isPotentiallyComparisionOpCall(const CallEvent &Call) { in isPotentiallyComparisionOpCall() argument
272 if (Call.getNumArgs() != 2 || !isStdFunctionCall(Call)) in isPotentiallyComparisionOpCall()
274 return smartptr::isStdSmartPtr(Call.getArgExpr(0)) || in isPotentiallyComparisionOpCall()
275 smartptr::isStdSmartPtr(Call.getArgExpr(1)); in isPotentiallyComparisionOpCall()
278 bool SmartPtrModeling::evalCall(const CallEvent &Call, in evalCall() argument
285 if (ModelSmartPtrDereference && isPotentiallyComparisionOpCall(Call)) in evalCall()
286 if (handleComparisionOp(Call, C)) in evalCall()
289 if (ModelSmartPtrDereference && isStdOstreamOperatorCall(Call)) in evalCall()
290 return handleOstreamOperator(Call, C); in evalCall()
292 if (Call.isCalled(StdSwapCall)) { in evalCall()
294 assert(Call.getNumArgs() == 2 && "std::swap should have two arguments"); in evalCall()
295 const Expr *FirstArg = Call.getArgExpr(0); in evalCall()
298 return handleSwap(State, Call.getArgSVal(0), Call.getArgSVal(1), C); in evalCall()
301 if (Call.isCalled(StdMakeUniqueCall) || in evalCall()
302 Call.isCalled(StdMakeUniqueForOverwriteCall)) { in evalCall()
306 const Optional<SVal> ThisRegionOpt = Call.getReturnValueUnderConstruction(); in evalCall()
311 Call.getOriginExpr(), C.getLocationContext(), in evalCall()
312 getPointerTypeFromTemplateArg(Call, C), C.blockCount()); in evalCall()
337 Call.getConstructionContext(), {}); in evalCall()
345 if (!smartptr::isStdSmartPtrCall(Call)) in evalCall()
348 if (isBoolConversionMethod(Call)) { in evalCall()
350 cast<CXXInstanceCall>(&Call)->getCXXThisVal().getAsRegion(); in evalCall()
357 handleBoolConversion(Call, C); in evalCall()
368 Call.getOriginExpr(), C.getLocationContext(), in evalCall()
369 C.getSValBuilder().makeZeroVal(Call.getResultType()))); in evalCall()
378 if (const auto *CC = dyn_cast<CXXConstructorCall>(&Call)) { in evalCall()
387 return handleMoveCtr(Call, C, ThisRegion); in evalCall()
389 if (Call.getNumArgs() == 0) { in evalCall()
404 const auto *TrackingExpr = Call.getArgExpr(0); in evalCall()
407 auto ArgVal = Call.getArgSVal(0); in evalCall()
428 if (handleAssignOp(Call, C)) in evalCall()
431 const SmartPtrMethodHandlerFn *Handler = SmartPtrMethodHandlers.lookup(Call); in evalCall()
434 (this->**Handler)(Call, C); in evalCall()
451 bool SmartPtrModeling::handleComparisionOp(const CallEvent &Call, in handleComparisionOp() argument
453 const auto *FC = dyn_cast<SimpleFunctionCall>(&Call); in handleComparisionOp()
483 SVal First = Call.getArgSVal(0); in handleComparisionOp()
484 SVal Second = Call.getArgSVal(1); in handleComparisionOp()
485 const auto *FirstExpr = Call.getArgExpr(0); in handleComparisionOp()
486 const auto *SecondExpr = Call.getArgExpr(1); in handleComparisionOp()
488 const auto *ResultExpr = Call.getOriginExpr(); in handleComparisionOp()
499 Call.getResultType()); in handleComparisionOp()
517 bool SmartPtrModeling::handleOstreamOperator(const CallEvent &Call, in handleOstreamOperator() argument
528 const auto StreamVal = Call.getArgSVal(0); in handleOstreamOperator()
533 State->invalidateRegions({StreamThisRegion}, Call.getOriginExpr(), in handleOstreamOperator()
536 State->BindExpr(Call.getOriginExpr(), C.getLocationContext(), StreamVal); in handleOstreamOperator()
577 const CallEvent *Call) const { in checkRegionChanges()
599 void SmartPtrModeling::handleReset(const CallEvent &Call, in handleReset() argument
602 const auto *IC = dyn_cast<CXXInstanceCall>(&Call); in handleReset()
610 assert(Call.getArgExpr(0)->getType()->isPointerType() && in handleReset()
612 State = State->set<TrackedRegionMap>(ThisRegion, Call.getArgSVal(0)); in handleReset()
613 const auto *TrackingExpr = Call.getArgExpr(0); in handleReset()
629 void SmartPtrModeling::handleRelease(const CallEvent &Call, in handleRelease() argument
632 const auto *IC = dyn_cast<CXXInstanceCall>(&Call); in handleRelease()
643 State = State->BindExpr(Call.getOriginExpr(), C.getLocationContext(), in handleRelease()
664 void SmartPtrModeling::handleSwapMethod(const CallEvent &Call, in handleSwapMethod() argument
667 const auto *IC = dyn_cast<CXXInstanceCall>(&Call); in handleSwapMethod()
672 handleSwap(State, IC->getCXXThisVal(), Call.getArgSVal(0), C); in handleSwapMethod()
712 void SmartPtrModeling::handleGet(const CallEvent &Call, in handleGet() argument
715 const auto *IC = dyn_cast<CXXInstanceCall>(&Call); in handleGet()
725 State, ThisRegion, Call.getOriginExpr(), Call.getResultType(), C); in handleGet()
726 State = State->BindExpr(Call.getOriginExpr(), C.getLocationContext(), in handleGet()
732 bool SmartPtrModeling::handleAssignOp(const CallEvent &Call, in handleAssignOp() argument
735 const auto *OC = dyn_cast<CXXMemberOperatorCall>(&Call); in handleAssignOp()
748 bool AssignedNull = Call.getArgSVal(0).isZeroConstant(); in handleAssignOp()
768 bool SmartPtrModeling::handleMoveCtr(const CallEvent &Call, CheckerContext &C, in handleMoveCtr() argument
770 const auto *OtherSmartPtrRegion = Call.getArgSVal(0).getAsRegion(); in handleMoveCtr()
829 void SmartPtrModeling::handleBoolConversion(const CallEvent &Call, in handleBoolConversion() argument
833 const Expr *CallExpr = Call.getOriginExpr(); in handleBoolConversion()
835 cast<CXXInstanceCall>(&Call)->getCXXThisVal().getAsRegion(); in handleBoolConversion()
843 auto InnerPointerType = getInnerPointerType(Call, C); in handleBoolConversion()
868 C.getSValBuilder().makeZeroVal(Call.getResultType()))); in handleBoolConversion()