Loading clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -256,7 +256,9 @@ void PthreadLockChecker::checkPostCall(const CallEvent &Call, // are global C functions. // TODO: Maybe make this the default behavior of CallDescription // with exactly one identifier? if (!Call.isGlobalCFunction()) // FIXME: Try to handle cases when the implementation was inlined rather // than just giving up. if (!Call.isGlobalCFunction() || C.wasInlined) return; if (const FnCheck *Callback = PThreadCallbacks.lookup(Call)) Loading clang/test/Analysis/fuchsia_lock_impl.c 0 → 100644 +18 −0 Original line number Diff line number Diff line // RUN: %clang_analyze_cc1 -analyzer-checker=fuchsia.Lock -verify %s // expected-no-diagnostics typedef int spin_lock_t; void spin_lock(spin_lock_t *lock); int getCond(); int spin_trylock(spin_lock_t *lock) { if (getCond()) return 0; return -1; } void spin_unlock(spin_lock_t *lock); spin_lock_t mtx; void no_crash() { if (spin_trylock(&mtx) == 0) spin_unlock(&mtx); } Loading
clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -256,7 +256,9 @@ void PthreadLockChecker::checkPostCall(const CallEvent &Call, // are global C functions. // TODO: Maybe make this the default behavior of CallDescription // with exactly one identifier? if (!Call.isGlobalCFunction()) // FIXME: Try to handle cases when the implementation was inlined rather // than just giving up. if (!Call.isGlobalCFunction() || C.wasInlined) return; if (const FnCheck *Callback = PThreadCallbacks.lookup(Call)) Loading
clang/test/Analysis/fuchsia_lock_impl.c 0 → 100644 +18 −0 Original line number Diff line number Diff line // RUN: %clang_analyze_cc1 -analyzer-checker=fuchsia.Lock -verify %s // expected-no-diagnostics typedef int spin_lock_t; void spin_lock(spin_lock_t *lock); int getCond(); int spin_trylock(spin_lock_t *lock) { if (getCond()) return 0; return -1; } void spin_unlock(spin_lock_t *lock); spin_lock_t mtx; void no_crash() { if (spin_trylock(&mtx) == 0) spin_unlock(&mtx); }