From: Ted Kremenek Date: Thu, 12 Nov 2009 06:26:58 +0000 (+0000) Subject: PthreadLockChecker doesn't need PreVisitCallExpr() yet. All the current logic should... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe37d04a62c03a65d725cdc3b54c2e593518e92f;p=clang PthreadLockChecker doesn't need PreVisitCallExpr() yet. All the current logic should be done in PostVisitCallExpr() git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86959 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/PthreadLockChecker.cpp b/lib/Analysis/PthreadLockChecker.cpp index 09632547c8..66206616b0 100644 --- a/lib/Analysis/PthreadLockChecker.cpp +++ b/lib/Analysis/PthreadLockChecker.cpp @@ -30,7 +30,6 @@ public: static int x = 0; return &x; } - void PreVisitCallExpr(CheckerContext &C, const CallExpr *CE); void PostVisitCallExpr(CheckerContext &C, const CallExpr *CE); void AcquireLock(CheckerContext &C, const CallExpr *CE, @@ -55,8 +54,9 @@ void clang::RegisterPthreadLockChecker(GRExprEngine &Eng) { Eng.registerCheck(new PthreadLockChecker()); } -void PthreadLockChecker::PreVisitCallExpr(CheckerContext &C, - const CallExpr *CE) { + +void PthreadLockChecker::PostVisitCallExpr(CheckerContext &C, + const CallExpr *CE) { const GRState *state = C.getState(); const Expr *Callee = CE->getCallee(); const CodeTextRegion *R = @@ -66,7 +66,7 @@ void PthreadLockChecker::PreVisitCallExpr(CheckerContext &C, return; llvm::StringRef FName = R->getDecl()->getName(); - + if (FName == "pthread_mutex_lock") { if (CE->getNumArgs() != 1) return; @@ -76,22 +76,8 @@ void PthreadLockChecker::PreVisitCallExpr(CheckerContext &C, if (CE->getNumArgs() != 1) return; AcquireLock(C, CE, state->getSVal(CE->getArg(0)), true); - } -} - -void PthreadLockChecker::PostVisitCallExpr(CheckerContext &C, - const CallExpr *CE) { - const GRState *state = C.getState(); - const Expr *Callee = CE->getCallee(); - const CodeTextRegion *R = - dyn_cast_or_null(state->getSVal(Callee).getAsRegion()); - - if (!R) - return; - - llvm::StringRef FName = R->getDecl()->getName(); - - if (FName == "pthread_mutex_unlock") { + } + else if (FName == "pthread_mutex_unlock") { if (CE->getNumArgs() != 1) return; ReleaseLock(C, CE, state->getSVal(CE->getArg(0)));