diff options
author | Josh Gao <jmgao@google.com> | 2017-08-01 19:18:05 +0000 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2017-08-01 19:18:05 +0000 |
commit | bbd6108369fa773ae7103c2c681dfdbd1a4c2c20 (patch) | |
tree | 4b657dad3dbb4b634bc1cbad6e99d00febbabedd /clang/lib/Analysis/ThreadSafety.cpp | |
parent | 836a64b53e378c988a9f75e5a8ef258af507140a (diff) | |
download | bcm5719-llvm-bbd6108369fa773ae7103c2c681dfdbd1a4c2c20.tar.gz bcm5719-llvm-bbd6108369fa773ae7103c2c681dfdbd1a4c2c20.zip |
Thread Safety Analysis: fix assert_capability.
Summary:
Previously, the assert_capability attribute was completely ignored by
thread safety analysis.
Reviewers: delesley, rnk
Reviewed By: delesley
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D36122
llvm-svn: 309725
Diffstat (limited to 'clang/lib/Analysis/ThreadSafety.cpp')
-rw-r--r-- | clang/lib/Analysis/ThreadSafety.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 879a15c9c2a..902570b3194 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -1735,8 +1735,23 @@ void BuildLockset::handleCall(Expr *Exp, const NamedDecl *D, VarDecl *VD) { CapExprSet AssertLocks; Analyzer->getMutexIDs(AssertLocks, A, Exp, D, VD); for (const auto &AssertLock : AssertLocks) - Analyzer->addLock(FSet, llvm::make_unique<LockableFactEntry>( - AssertLock, LK_Shared, Loc, false, true), + Analyzer->addLock(FSet, + llvm::make_unique<LockableFactEntry>( + AssertLock, LK_Shared, Loc, false, true), + ClassifyDiagnostic(A)); + break; + } + + case attr::AssertCapability: { + AssertCapabilityAttr *A = cast<AssertCapabilityAttr>(At); + CapExprSet AssertLocks; + Analyzer->getMutexIDs(AssertLocks, A, Exp, D, VD); + for (const auto &AssertLock : AssertLocks) + Analyzer->addLock(FSet, + llvm::make_unique<LockableFactEntry>( + AssertLock, + A->isShared() ? LK_Shared : LK_Exclusive, Loc, + false, true), ClassifyDiagnostic(A)); break; } |