diff options
author | Timm Bäder <tbaeder@redhat.com> | 2023-09-06 12:19:20 +0200 |
---|---|---|
committer | Timm Bäder <tbaeder@redhat.com> | 2023-09-19 16:00:33 +0200 |
commit | cf8e189a99f988398a48148b9ea7901948665ab0 (patch) | |
tree | 12cdd1027610daab914f7868682b14b935812274 /clang/lib/Analysis/ThreadSafety.cpp | |
parent | 5f476b80e3d472f672f5f6a719eebe2c0aadf52c (diff) | |
download | llvm-cf8e189a99f988398a48148b9ea7901948665ab0.zip llvm-cf8e189a99f988398a48148b9ea7901948665ab0.tar.gz llvm-cf8e189a99f988398a48148b9ea7901948665ab0.tar.bz2 |
[clang][TSA] Thread safety cleanup functions
Consider cleanup functions in thread safety analysis.
Differential Revision: https://reviews.llvm.org/D152504
Diffstat (limited to 'clang/lib/Analysis/ThreadSafety.cpp')
-rw-r--r-- | clang/lib/Analysis/ThreadSafety.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 3107d03..3e6ceb7 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -1773,7 +1773,8 @@ void BuildLockset::checkPtAccess(const Expr *Exp, AccessKind AK, /// /// \param Exp The call expression. /// \param D The callee declaration. -/// \param Self If \p Exp = nullptr, the implicit this argument. +/// \param Self If \p Exp = nullptr, the implicit this argument or the argument +/// of an implicitly called cleanup function. /// \param Loc If \p Exp = nullptr, the location. void BuildLockset::handleCall(const Expr *Exp, const NamedDecl *D, til::LiteralPtr *Self, SourceLocation Loc) { @@ -2417,6 +2418,15 @@ void ThreadSafetyAnalyzer::runAnalysis(AnalysisDeclContext &AC) { AD.getTriggerStmt()->getEndLoc()); break; } + + case CFGElement::CleanupFunction: { + const CFGCleanupFunction &CF = BI.castAs<CFGCleanupFunction>(); + LocksetBuilder.handleCall(/*Exp=*/nullptr, CF.getFunctionDecl(), + SxBuilder.createVariable(CF.getVarDecl()), + CF.getVarDecl()->getLocation()); + break; + } + case CFGElement::TemporaryDtor: { auto TD = BI.castAs<CFGTemporaryDtor>(); |