Skip to content
Snippets Groups Projects
Commit 6c37c5c3 authored by Ted Kremenek's avatar Ted Kremenek
Browse files

PthreadLockChecker doesn't need PreVisitCallExpr() yet. All the current logic...

PthreadLockChecker doesn't need PreVisitCallExpr() yet.  All the current logic should be done in PostVisitCallExpr()

llvm-svn: 86959
parent d48568f6
No related merge requests found
...@@ -30,7 +30,6 @@ public: ...@@ -30,7 +30,6 @@ public:
static int x = 0; static int x = 0;
return &x; return &x;
} }
void PreVisitCallExpr(CheckerContext &C, const CallExpr *CE);
void PostVisitCallExpr(CheckerContext &C, const CallExpr *CE); void PostVisitCallExpr(CheckerContext &C, const CallExpr *CE);
void AcquireLock(CheckerContext &C, const CallExpr *CE, void AcquireLock(CheckerContext &C, const CallExpr *CE,
...@@ -55,8 +54,9 @@ void clang::RegisterPthreadLockChecker(GRExprEngine &Eng) { ...@@ -55,8 +54,9 @@ void clang::RegisterPthreadLockChecker(GRExprEngine &Eng) {
Eng.registerCheck(new PthreadLockChecker()); 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 GRState *state = C.getState();
const Expr *Callee = CE->getCallee(); const Expr *Callee = CE->getCallee();
const CodeTextRegion *R = const CodeTextRegion *R =
...@@ -66,7 +66,7 @@ void PthreadLockChecker::PreVisitCallExpr(CheckerContext &C, ...@@ -66,7 +66,7 @@ void PthreadLockChecker::PreVisitCallExpr(CheckerContext &C,
return; return;
llvm::StringRef FName = R->getDecl()->getName(); llvm::StringRef FName = R->getDecl()->getName();
if (FName == "pthread_mutex_lock") { if (FName == "pthread_mutex_lock") {
if (CE->getNumArgs() != 1) if (CE->getNumArgs() != 1)
return; return;
...@@ -76,22 +76,8 @@ void PthreadLockChecker::PreVisitCallExpr(CheckerContext &C, ...@@ -76,22 +76,8 @@ void PthreadLockChecker::PreVisitCallExpr(CheckerContext &C,
if (CE->getNumArgs() != 1) if (CE->getNumArgs() != 1)
return; return;
AcquireLock(C, CE, state->getSVal(CE->getArg(0)), true); AcquireLock(C, CE, state->getSVal(CE->getArg(0)), true);
} }
} else if (FName == "pthread_mutex_unlock") {
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") {
if (CE->getNumArgs() != 1) if (CE->getNumArgs() != 1)
return; return;
ReleaseLock(C, CE, state->getSVal(CE->getArg(0))); ReleaseLock(C, CE, state->getSVal(CE->getArg(0)));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment