[PATCH] D74003: [analyzer] Prevent assertion failure in PThreadLockChecker when the implementations of the locking functions are available

Gábor Horváth via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 5 16:01:43 PST 2020


This revision was automatically updated to reflect the committed changes.
Closed by commit rGe4f4a6c0f5bb: [analyzer] Prevent an assertion failure in PThreadLockChecker (authored by xazax.hun).

Changed prior to commit:
  https://reviews.llvm.org/D74003?vs=242447&id=242778#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D74003/new/

https://reviews.llvm.org/D74003

Files:
  clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp
  clang/test/Analysis/fuchsia_lock_impl.c


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);
+}
Index: clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp
===================================================================
--- clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp
+++ clang/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp
@@ -256,7 +256,9 @@
   // 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))


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74003.242778.patch
Type: text/x-patch
Size: 1274 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200206/f0b621fb/attachment.bin>


More information about the cfe-commits mailing list