[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
Tue Feb 4 15:55:10 PST 2020
xazax.hun created this revision.
xazax.hun added reviewers: NoQ, haowei.
xazax.hun added a project: clang.
Herald added subscribers: Charusso, gamesh411, dkrupp, donat.nagy, Szelethus, jfb, mikhail.ramalho, a.sidorin, rnkovacs, szepet, baloghadamsoftware.
This is very unlikely to happen for PThreads, but using the CSA on a libc or Fuchsia will trigger this assertion failure.
Repository:
rG LLVM Github Monorepo
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,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))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74003.242447.patch
Type: text/x-patch
Size: 1171 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200204/b6eab40f/attachment.bin>
More information about the cfe-commits
mailing list