diff options
author | Prabhu Rajasekaran <prabhukr@google.com> | 2025-05-20 07:45:14 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-20 07:45:14 -0700 |
commit | 1a9377bef3d3c42edf6cc705466ededd6f7761f6 (patch) | |
tree | 5e7fda567f999af6ca33e52a670f0d0f1a39ccc5 | |
parent | a0058d18512e0ddf355bb474701e2183d84a0506 (diff) | |
download | llvm-1a9377bef3d3c42edf6cc705466ededd6f7761f6.zip llvm-1a9377bef3d3c42edf6cc705466ededd6f7761f6.tar.gz llvm-1a9377bef3d3c42edf6cc705466ededd6f7761f6.tar.bz2 |
[clang][analysis] Thread Safety Analysis: Handle parenthesis (#140656)
-rw-r--r-- | clang/lib/Analysis/ThreadSafety.cpp | 2 | ||||
-rw-r--r-- | clang/test/Analysis/thread-safety-handle-parenthesis.cpp | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 7e86af6..156df51a 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 0000000..ed0280b --- /dev/null +++ b/clang/test/Analysis/thread-safety-handle-parenthesis.cpp @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -verify -fsyntax-only -Wthread-safety %s + +struct __attribute__((lockable)) Lock {}; + +void sink_protected(int); + +struct Baz { +public: + Lock lock_; + int protected_num_ __attribute__((guarded_by(lock_))) = 1; +}; + +void paren_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_'}} +} |