aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/PthreadLockChecker.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-11-12 06:26:58 +0000
committerTed Kremenek <kremenek@apple.com>2009-11-12 06:26:58 +0000
commitfe37d04a62c03a65d725cdc3b54c2e593518e92f (patch)
tree1a6792dedd26ae8b63b1b267adb23c5f70d3b011 /lib/Analysis/PthreadLockChecker.cpp
parentac9bea8bb7a4f1821d63aaa926b60062311b2aa3 (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.cpp26
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)));