Lines Matching refs:Call
33 class CastValueChecker : public Checker<check::DeadSymbols, eval::Call> {
37 std::function<void(const CastValueChecker *, const CallEvent &Call,
53 bool evalCall(const CallEvent &Call, CheckerContext &C) const;
58 // {{{namespace, call}, argument-count}, {callback, kind}}
77 void evalCast(const CallEvent &Call, DefinedOrUnknownSVal DV,
79 void evalDynCast(const CallEvent &Call, DefinedOrUnknownSVal DV,
81 void evalCastOrNull(const CallEvent &Call, DefinedOrUnknownSVal DV,
83 void evalDynCastOrNull(const CallEvent &Call, DefinedOrUnknownSVal DV,
85 void evalCastAs(const CallEvent &Call, DefinedOrUnknownSVal DV,
87 void evalGetAs(const CallEvent &Call, DefinedOrUnknownSVal DV,
89 void evalIsa(const CallEvent &Call, DefinedOrUnknownSVal DV,
91 void evalIsaAndNonNull(const CallEvent &Call, DefinedOrUnknownSVal DV,
197 static void addCastTransition(const CallEvent &Call, DefinedOrUnknownSVal DV,
207 QualType CastToTy = Call.getResultType();
209 if (Call.getNumArgs() > 0) {
210 Object = Call.getArgExpr(0);
211 CastFromTy = Call.parameters()[0]->getType();
213 Object = cast<CXXInstanceCall>(&Call)->getCXXThisExpr();
254 State->BindExpr(Call.getOriginExpr(), C.getLocationContext(), V, false),
258 static void addInstanceOfTransition(const CallEvent &Call,
262 const FunctionDecl *FD = Call.getDecl()->getAsFunction();
263 QualType CastFromTy = Call.parameters()[0]->getType();
316 NewState->BindExpr(Call.getOriginExpr(), C.getLocationContext(),
318 getNoteTag(C, CastInfo, CastToTy, Call.getArgExpr(0), true,
330 State->BindExpr(Call.getOriginExpr(), C.getLocationContext(),
332 getNoteTag(C, CastToTyVec, Call.getArgExpr(0), IsAnyKnown));
340 static void evalNonNullParamNonNullReturn(const CallEvent &Call,
344 addCastTransition(Call, DV, C, /*IsNonNullParam=*/true,
348 static void evalNonNullParamNullReturn(const CallEvent &Call,
351 addCastTransition(Call, DV, C, /*IsNonNullParam=*/true,
355 static void evalNullParamNullReturn(const CallEvent &Call,
359 C.addTransition(State->BindExpr(Call.getOriginExpr(),
366 void CastValueChecker::evalCast(const CallEvent &Call, DefinedOrUnknownSVal DV,
368 evalNonNullParamNonNullReturn(Call, DV, C, /*IsCheckedCast=*/true);
371 void CastValueChecker::evalDynCast(const CallEvent &Call,
374 evalNonNullParamNonNullReturn(Call, DV, C);
375 evalNonNullParamNullReturn(Call, DV, C);
378 void CastValueChecker::evalCastOrNull(const CallEvent &Call,
381 evalNonNullParamNonNullReturn(Call, DV, C);
382 evalNullParamNullReturn(Call, DV, C);
385 void CastValueChecker::evalDynCastOrNull(const CallEvent &Call,
388 evalNonNullParamNonNullReturn(Call, DV, C);
389 evalNonNullParamNullReturn(Call, DV, C);
390 evalNullParamNullReturn(Call, DV, C);
397 static void evalZeroParamNonNullReturn(const CallEvent &Call,
401 addCastTransition(Call, DV, C, /*IsNonNullParam=*/true,
405 static void evalZeroParamNullReturn(const CallEvent &Call,
408 addCastTransition(Call, DV, C, /*IsNonNullParam=*/true,
412 void CastValueChecker::evalCastAs(const CallEvent &Call,
415 evalZeroParamNonNullReturn(Call, DV, C, /*IsCheckedCast=*/true);
418 void CastValueChecker::evalGetAs(const CallEvent &Call, DefinedOrUnknownSVal DV,
420 evalZeroParamNonNullReturn(Call, DV, C);
421 evalZeroParamNullReturn(Call, DV, C);
428 void CastValueChecker::evalIsa(const CallEvent &Call, DefinedOrUnknownSVal DV,
434 addInstanceOfTransition(Call, DV, NonNullState, C, /*IsInstanceOf=*/true);
435 addInstanceOfTransition(Call, DV, NonNullState, C, /*IsInstanceOf=*/false);
443 void CastValueChecker::evalIsaAndNonNull(const CallEvent &Call,
450 addInstanceOfTransition(Call, DV, NonNullState, C, /*IsInstanceOf=*/true);
451 addInstanceOfTransition(Call, DV, NonNullState, C, /*IsInstanceOf=*/false);
455 addInstanceOfTransition(Call, DV, NullState, C, /*IsInstanceOf=*/false);
460 // Main logic to evaluate a call.
463 bool CastValueChecker::evalCall(const CallEvent &Call,
465 const auto *Lookup = CDM.lookup(Call);
479 QualType ParamT = Call.parameters()[0]->getType();
480 QualType ResultT = Call.getResultType();
486 DV = Call.getArgSVal(0).getAs<DefinedOrUnknownSVal>();
491 const FunctionDecl *FD = Call.getDecl()->getAsFunction();
495 DV = Call.getArgSVal(0).getAs<DefinedOrUnknownSVal>();
499 const auto *InstanceCall = dyn_cast<CXXInstanceCall>(&Call);
510 Check(this, Call, *DV, C);