Lines Matching refs:C

54 static bool isSelfVar(SVal location, CheckerContext &C);
66 void checkForInvalidSelf(const Expr *E, CheckerContext &C,
71 void checkPostObjCMessage(const ObjCMethodCall &Msg, CheckerContext &C) const;
72 void checkPostStmt(const ObjCIvarRefExpr *E, CheckerContext &C) const;
73 void checkPreStmt(const ReturnStmt *S, CheckerContext &C) const;
75 CheckerContext &C) const;
76 void checkBind(SVal loc, SVal val, const Stmt *S, CheckerContext &C) const;
78 void checkPreCall(const CallEvent &CE, CheckerContext &C) const;
79 void checkPostCall(const CallEvent &CE, CheckerContext &C) const;
113 static SelfFlagEnum getSelfFlags(SVal val, CheckerContext &C) { in getSelfFlags() argument
114 return getSelfFlags(val, C.getState()); in getSelfFlags()
118 SelfFlagEnum flag, CheckerContext &C) { in addSelfFlag() argument
122 C.addTransition(state); in addSelfFlag()
126 static bool hasSelfFlag(SVal val, SelfFlagEnum flag, CheckerContext &C) { in hasSelfFlag() argument
127 return getSelfFlags(val, C) & flag; in hasSelfFlag()
133 static bool isInvalidSelf(const Expr *E, CheckerContext &C) { in isInvalidSelf() argument
134 SVal exprVal = C.getSVal(E); in isInvalidSelf()
135 if (!hasSelfFlag(exprVal, SelfFlag_Self, C)) in isInvalidSelf()
137 if (hasSelfFlag(exprVal, SelfFlag_InitRes, C)) in isInvalidSelf()
143 void ObjCSelfInitChecker::checkForInvalidSelf(const Expr *E, CheckerContext &C, in checkForInvalidSelf() argument
148 if (!C.getState()->get<CalledInit>()) in checkForInvalidSelf()
151 if (!isInvalidSelf(E, C)) in checkForInvalidSelf()
155 ExplodedNode *N = C.generateErrorNode(); in checkForInvalidSelf()
162 C.emitReport(std::make_unique<PathSensitiveBugReport>(*BT, errorStr, N)); in checkForInvalidSelf()
166 CheckerContext &C) const { in checkPostObjCMessage()
173 C.getCurrentAnalysisDeclContext()->getDecl()))) in checkPostObjCMessage()
178 ProgramStateRef state = C.getState(); in checkPostObjCMessage()
185 SVal V = C.getSVal(Msg.getOriginExpr()); in checkPostObjCMessage()
186 addSelfFlag(state, V, SelfFlag_InitRes, C); in checkPostObjCMessage()
197 CheckerContext &C) const { in checkPostStmt()
200 C.getCurrentAnalysisDeclContext()->getDecl()))) in checkPostStmt()
204 E->getBase(), C, in checkPostStmt()
210 CheckerContext &C) const { in checkPreStmt()
213 C.getCurrentAnalysisDeclContext()->getDecl()))) in checkPreStmt()
216 checkForInvalidSelf(S->getRetValue(), C, in checkPreStmt()
238 CheckerContext &C) const { in checkPreCall()
241 C.getCurrentAnalysisDeclContext()->getDecl()))) in checkPreCall()
244 ProgramStateRef state = C.getState(); in checkPreCall()
253 if (isSelfVar(argV, C)) { in checkPreCall()
254 unsigned selfFlags = getSelfFlags(state->getSVal(argV.castAs<Loc>()), C); in checkPreCall()
255 C.addTransition(state->set<PreCallSelfFlags>(selfFlags)); in checkPreCall()
257 } else if (hasSelfFlag(argV, SelfFlag_Self, C)) { in checkPreCall()
258 unsigned selfFlags = getSelfFlags(argV, C); in checkPreCall()
259 C.addTransition(state->set<PreCallSelfFlags>(selfFlags)); in checkPreCall()
266 CheckerContext &C) const { in checkPostCall()
269 C.getCurrentAnalysisDeclContext()->getDecl()))) in checkPostCall()
272 ProgramStateRef state = C.getState(); in checkPostCall()
281 if (isSelfVar(argV, C)) { in checkPostCall()
285 addSelfFlag(state, state->getSVal(argV.castAs<Loc>()), prevFlags, C); in checkPostCall()
287 } else if (hasSelfFlag(argV, SelfFlag_Self, C)) { in checkPostCall()
292 addSelfFlag(state, CE.getReturnValue(), prevFlags, C); in checkPostCall()
297 C.addTransition(state); in checkPostCall()
302 CheckerContext &C) const { in checkLocation()
304 C.getCurrentAnalysisDeclContext()->getDecl()))) in checkLocation()
309 ProgramStateRef state = C.getState(); in checkLocation()
310 if (isSelfVar(location, C)) in checkLocation()
312 C); in checkLocation()
317 CheckerContext &C) const { in checkBind()
323 if ((isSelfVar(loc, C)) && in checkBind()
324 !hasSelfFlag(val, SelfFlag_InitRes, C) && in checkBind()
325 !hasSelfFlag(val, SelfFlag_Self, C) && in checkBind()
326 !isSelfVar(val, C)) { in checkBind()
329 ProgramStateRef State = C.getState(); in checkBind()
333 C.addTransition(State); in checkBind()
410 static bool isSelfVar(SVal location, CheckerContext &C) { in isSelfVar() argument
411 AnalysisDeclContext *analCtx = C.getCurrentAnalysisDeclContext(); in isSelfVar()