Index: clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp +++ clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp @@ -256,7 +256,7 @@ // are global C functions. // TODO: Maybe make this the default behavior of CallDescription // with exactly one identifier? - if (!Call.isGlobalCFunction()) + if (!Call.isGlobalCFunction() || C.wasInlined) return; if (const FnCheck *Callback = PThreadCallbacks.lookup(Call)) Index: clang/test/Analysis/fuchsia_lock_impl.c =================================================================== --- /dev/null +++ clang/test/Analysis/fuchsia_lock_impl.c @@ -0,0 +1,18 @@ +// 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); +}