Commit e4f4a6c0 authored by Gabor Horvath's avatar Gabor Horvath
Browse files

[analyzer] Prevent an assertion failure in PThreadLockChecker

When the implementations of the locking functions are available.

Differential Revision: https://reviews.llvm.org/D74003
parent 98b273c8
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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))
+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);
}