[clang] Thread Safety Analysis: Handle parenthesis (PR #140656)
via cfe-commits
cfe-commits at lists.llvm.org
Mon May 19 19:00:52 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Prabhu Rajasekaran (Prabhuk)
<details>
<summary>Changes</summary>
When the variable guared by a lock was enclosed in parenthesis, access
violation warnings were not emitted. This patch fixes it and adds a
regression test.
---
Full diff: https://github.com/llvm/llvm-project/pull/140656.diff
2 Files Affected:
- (modified) clang/lib/Analysis/ThreadSafety.cpp (+1-1)
- (added) clang/test/Analysis/thread-safety-handle-parenthesis.cpp (+20)
``````````diff
diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp
index 7e86af6b4a317..156df51a71012 100644
--- a/clang/lib/Analysis/ThreadSafety.cpp
+++ b/clang/lib/Analysis/ThreadSafety.cpp
@@ -1671,7 +1671,7 @@ void ThreadSafetyAnalyzer::checkAccess(const FactSet &FSet, const Expr *Exp,
// Guard against self-initialization. e.g., int &i = i;
if (E == Exp)
break;
- Exp = E;
+ Exp = E->IgnoreImplicit()->IgnoreParenCasts();
continue;
}
}
diff --git a/clang/test/Analysis/thread-safety-handle-parenthesis.cpp b/clang/test/Analysis/thread-safety-handle-parenthesis.cpp
new file mode 100644
index 0000000000000..6be8362a650e0
--- /dev/null
+++ b/clang/test/Analysis/thread-safety-handle-parenthesis.cpp
@@ -0,0 +1,20 @@
+
+// RUN: %clang_cc1 -verify -fsyntax-only -std=c++20 -Wthread-safety %s
+
+class __attribute__((lockable)) Lock {};
+
+void sink_protected(int) {}
+
+class Baz {
+public:
+ Lock lock_;
+ int protected_num_ __attribute__((guarded_by(lock_))) = 1;
+};
+
+void baz_paran_test() {
+ Baz baz;
+ int& n = baz.protected_num_;
+ sink_protected(n); // expected-warning{{reading variable 'protected_num_' requires holding mutex 'baz.lock_'}}
+ int& n2 = (baz.protected_num_);
+ sink_protected(n2); // expected-warning{{reading variable 'protected_num_' requires holding mutex 'baz.lock_'}}
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/140656
More information about the cfe-commits
mailing list