https://github.com/Prabhuk updated 
https://github.com/llvm/llvm-project/pull/140656

>From 8570d7a7c2c10e94db53fa23074f46706c8cb32a Mon Sep 17 00:00:00 2001
From: prabhukr <prabh...@google.com>
Date: Tue, 20 May 2025 01:57:36 +0000
Subject: [PATCH 1/2] Thread Safety Analysis: Handle parenthesis

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.
---
 clang/lib/Analysis/ThreadSafety.cpp           |  2 +-
 .../thread-safety-handle-parenthesis.cpp      | 19 +++++++++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)
 create mode 100644 clang/test/Analysis/thread-safety-handle-parenthesis.cpp

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..910ce597b5033
--- /dev/null
+++ b/clang/test/Analysis/thread-safety-handle-parenthesis.cpp
@@ -0,0 +1,19 @@
+// 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_'}}
+}

>From a97f15dc1b070d5f66d987df98e9a8834bf2722b Mon Sep 17 00:00:00 2001
From: prabhukr <prabh...@google.com>
Date: Tue, 20 May 2025 02:07:25 +0000
Subject: [PATCH 2/2] simplify test file

---
 clang/test/Analysis/thread-safety-handle-parenthesis.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/clang/test/Analysis/thread-safety-handle-parenthesis.cpp 
b/clang/test/Analysis/thread-safety-handle-parenthesis.cpp
index 910ce597b5033..0b6b8ce61658b 100644
--- a/clang/test/Analysis/thread-safety-handle-parenthesis.cpp
+++ b/clang/test/Analysis/thread-safety-handle-parenthesis.cpp
@@ -1,10 +1,10 @@
-// RUN: %clang_cc1 -verify -fsyntax-only -std=c++20 -Wthread-safety %s
+// RUN: %clang_cc1 -verify -fsyntax-only -Wthread-safety %s
 
-class __attribute__((lockable)) Lock {};
+struct __attribute__((lockable)) Lock {};
 
-void sink_protected(int) {}
+void sink_protected(int);
 
-class Baz {
+struct Baz {
 public:
     Lock lock_;
     int protected_num_ __attribute__((guarded_by(lock_))) = 1;

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to