diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-11-12 06:26:58 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-11-12 06:26:58 +0000 |
commit | fe37d04a62c03a65d725cdc3b54c2e593518e92f (patch) | |
tree | 1a6792dedd26ae8b63b1b267adb23c5f70d3b011 /lib/Analysis/PthreadLockChecker.cpp | |
parent | ac9bea8bb7a4f1821d63aaa926b60062311b2aa3 (diff) |
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
Diffstat (limited to 'lib/Analysis/PthreadLockChecker.cpp')
-rw-r--r-- | lib/Analysis/PthreadLockChecker.cpp | 26 |
1 files changed, 6 insertions, 20 deletions
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<CodeTextRegion>(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))); |