forked from OSchip/llvm-project
[analyzer] Prevent an assertion failure in PThreadLockChecker
When the implementations of the locking functions are available. Differential Revision: https://reviews.llvm.org/D74003
This commit is contained in:
parent
98b273c893
commit
e4f4a6c0f5
|
@ -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))
|
||||
|
|
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue