[clang] [clang analysis][NFCI] Preparatory work for D153131. (PR #67420)
https://github.com/legrosbuffle closed https://github.com/llvm/llvm-project/pull/67420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang analysis][NFCI] Preparatory work for D153131. (PR #67420)
llvmbot wrote: @llvm/pr-subscribers-clang Changes This was ported over from phabricator. Review https://reviews.llvm.org/D153131. --- Full diff: https://github.com/llvm/llvm-project/pull/67420.diff 1 Files Affected: - (modified) clang/lib/Analysis/ThreadSafety.cpp (+72-61) ``diff diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 3e6ceb7d54c427a..f160cf4d013c78d 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -1015,6 +1015,19 @@ class ThreadSafetyAnalyzer { BeforeSet *GlobalBeforeSet; + void warnIfMutexNotHeld(const FactSet , const NamedDecl *D, + const Expr *Exp, AccessKind AK, Expr *MutexExp, + ProtectedOperationKind POK, til::LiteralPtr *Self, + SourceLocation Loc); + void warnIfMutexHeld(const FactSet , const NamedDecl *D, const Expr *Exp, + Expr *MutexExp, til::LiteralPtr *Self, + SourceLocation Loc); + + void checkAccess(const FactSet , const Expr *Exp, AccessKind AK, + ProtectedOperationKind POK); + void checkPtAccess(const FactSet , const Expr *Exp, AccessKind AK, + ProtectedOperationKind POK); + public: ThreadSafetyAnalyzer(ThreadSafetyHandler , BeforeSet* Bset) : Arena(), SxBuilder(Arena), Handler(H), GlobalBeforeSet(Bset) {} @@ -1534,16 +1547,15 @@ class BuildLockset : public ConstStmtVisitor { unsigned CtxIndex; // helper functions - void warnIfMutexNotHeld(const NamedDecl *D, const Expr *Exp, AccessKind AK, - Expr *MutexExp, ProtectedOperationKind POK, - til::LiteralPtr *Self, SourceLocation Loc); - void warnIfMutexHeld(const NamedDecl *D, const Expr *Exp, Expr *MutexExp, - til::LiteralPtr *Self, SourceLocation Loc); void checkAccess(const Expr *Exp, AccessKind AK, - ProtectedOperationKind POK = POK_VarAccess); + ProtectedOperationKind POK = POK_VarAccess) { +Analyzer->checkAccess(FSet, Exp, AK, POK); + } void checkPtAccess(const Expr *Exp, AccessKind AK, - ProtectedOperationKind POK = POK_VarAccess); + ProtectedOperationKind POK = POK_VarAccess) { +Analyzer->checkPtAccess(FSet, Exp, AK, POK); + } void handleCall(const Expr *Exp, const NamedDecl *D, til::LiteralPtr *Self = nullptr, @@ -1571,17 +1583,14 @@ class BuildLockset : public ConstStmtVisitor { /// Warn if the LSet does not contain a lock sufficient to protect access /// of at least the passed in AccessKind. -void BuildLockset::warnIfMutexNotHeld(const NamedDecl *D, const Expr *Exp, - AccessKind AK, Expr *MutexExp, - ProtectedOperationKind POK, - til::LiteralPtr *Self, - SourceLocation Loc) { +void ThreadSafetyAnalyzer::warnIfMutexNotHeld( +const FactSet , const NamedDecl *D, const Expr *Exp, AccessKind AK, +Expr *MutexExp, ProtectedOperationKind POK, til::LiteralPtr *Self, +SourceLocation Loc) { LockKind LK = getLockKindFromAccessKind(AK); - - CapabilityExpr Cp = - Analyzer->SxBuilder.translateAttrExpr(MutexExp, D, Exp, Self); + CapabilityExpr Cp = SxBuilder.translateAttrExpr(MutexExp, D, Exp, Self); if (Cp.isInvalid()) { -warnInvalidLock(Analyzer->Handler, MutexExp, D, Exp, Cp.getKind()); +warnInvalidLock(Handler, MutexExp, D, Exp, Cp.getKind()); return; } else if (Cp.shouldIgnore()) { return; @@ -1589,68 +1598,67 @@ void BuildLockset::warnIfMutexNotHeld(const NamedDecl *D, const Expr *Exp, if (Cp.negative()) { // Negative capabilities act like locks excluded -const FactEntry *LDat = FSet.findLock(Analyzer->FactMan, !Cp); +const FactEntry *LDat = FSet.findLock(FactMan, !Cp); if (LDat) { - Analyzer->Handler.handleFunExcludesLock( - Cp.getKind(), D->getNameAsString(), (!Cp).toString(), Loc); - return; +Handler.handleFunExcludesLock(Cp.getKind(), D->getNameAsString(), + (!Cp).toString(), Loc); +return; } // If this does not refer to a negative capability in the same class, // then stop here. -if (!Analyzer->inCurrentScope(Cp)) - return; +if (!inCurrentScope(Cp)) +return; // Otherwise the negative requirement must be propagated to the caller. -LDat = FSet.findLock(Analyzer->FactMan, Cp); +LDat = FSet.findLock(FactMan, Cp); if (!LDat) { - Analyzer->Handler.handleNegativeNotHeld(D, Cp.toString(), Loc); +Handler.handleNegativeNotHeld(D, Cp.toString(), Loc); } return; } - const FactEntry *LDat = FSet.findLockUniv(Analyzer->FactMan, Cp); + const FactEntry *LDat =
[clang] [clang analysis][NFCI] Preparatory work for D153131. (PR #67420)
https://github.com/legrosbuffle created https://github.com/llvm/llvm-project/pull/67420 This was ported over from phabricator. Review https://reviews.llvm.org/D153131. >From 3581fc00f690194ac4bac631311ecdb18593b7ba Mon Sep 17 00:00:00 2001 From: Clement Courbet Date: Tue, 26 Sep 2023 14:02:44 +0200 Subject: [PATCH] [clang analysis][NFCI] Preparatory work for D153131. This was ported over from phabricator.i Review https://reviews.llvm.org/D153131. --- clang/lib/Analysis/ThreadSafety.cpp | 133 +++- 1 file changed, 72 insertions(+), 61 deletions(-) diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 3e6ceb7d54c427a..f160cf4d013c78d 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -1015,6 +1015,19 @@ class ThreadSafetyAnalyzer { BeforeSet *GlobalBeforeSet; + void warnIfMutexNotHeld(const FactSet , const NamedDecl *D, + const Expr *Exp, AccessKind AK, Expr *MutexExp, + ProtectedOperationKind POK, til::LiteralPtr *Self, + SourceLocation Loc); + void warnIfMutexHeld(const FactSet , const NamedDecl *D, const Expr *Exp, + Expr *MutexExp, til::LiteralPtr *Self, + SourceLocation Loc); + + void checkAccess(const FactSet , const Expr *Exp, AccessKind AK, + ProtectedOperationKind POK); + void checkPtAccess(const FactSet , const Expr *Exp, AccessKind AK, + ProtectedOperationKind POK); + public: ThreadSafetyAnalyzer(ThreadSafetyHandler , BeforeSet* Bset) : Arena(), SxBuilder(Arena), Handler(H), GlobalBeforeSet(Bset) {} @@ -1534,16 +1547,15 @@ class BuildLockset : public ConstStmtVisitor { unsigned CtxIndex; // helper functions - void warnIfMutexNotHeld(const NamedDecl *D, const Expr *Exp, AccessKind AK, - Expr *MutexExp, ProtectedOperationKind POK, - til::LiteralPtr *Self, SourceLocation Loc); - void warnIfMutexHeld(const NamedDecl *D, const Expr *Exp, Expr *MutexExp, - til::LiteralPtr *Self, SourceLocation Loc); void checkAccess(const Expr *Exp, AccessKind AK, - ProtectedOperationKind POK = POK_VarAccess); + ProtectedOperationKind POK = POK_VarAccess) { +Analyzer->checkAccess(FSet, Exp, AK, POK); + } void checkPtAccess(const Expr *Exp, AccessKind AK, - ProtectedOperationKind POK = POK_VarAccess); + ProtectedOperationKind POK = POK_VarAccess) { +Analyzer->checkPtAccess(FSet, Exp, AK, POK); + } void handleCall(const Expr *Exp, const NamedDecl *D, til::LiteralPtr *Self = nullptr, @@ -1571,17 +1583,14 @@ class BuildLockset : public ConstStmtVisitor { /// Warn if the LSet does not contain a lock sufficient to protect access /// of at least the passed in AccessKind. -void BuildLockset::warnIfMutexNotHeld(const NamedDecl *D, const Expr *Exp, - AccessKind AK, Expr *MutexExp, - ProtectedOperationKind POK, - til::LiteralPtr *Self, - SourceLocation Loc) { +void ThreadSafetyAnalyzer::warnIfMutexNotHeld( +const FactSet , const NamedDecl *D, const Expr *Exp, AccessKind AK, +Expr *MutexExp, ProtectedOperationKind POK, til::LiteralPtr *Self, +SourceLocation Loc) { LockKind LK = getLockKindFromAccessKind(AK); - - CapabilityExpr Cp = - Analyzer->SxBuilder.translateAttrExpr(MutexExp, D, Exp, Self); + CapabilityExpr Cp = SxBuilder.translateAttrExpr(MutexExp, D, Exp, Self); if (Cp.isInvalid()) { -warnInvalidLock(Analyzer->Handler, MutexExp, D, Exp, Cp.getKind()); +warnInvalidLock(Handler, MutexExp, D, Exp, Cp.getKind()); return; } else if (Cp.shouldIgnore()) { return; @@ -1589,68 +1598,67 @@ void BuildLockset::warnIfMutexNotHeld(const NamedDecl *D, const Expr *Exp, if (Cp.negative()) { // Negative capabilities act like locks excluded -const FactEntry *LDat = FSet.findLock(Analyzer->FactMan, !Cp); +const FactEntry *LDat = FSet.findLock(FactMan, !Cp); if (LDat) { - Analyzer->Handler.handleFunExcludesLock( - Cp.getKind(), D->getNameAsString(), (!Cp).toString(), Loc); - return; +Handler.handleFunExcludesLock(Cp.getKind(), D->getNameAsString(), + (!Cp).toString(), Loc); +return; } // If this does not refer to a negative capability in the same class, // then stop here. -if (!Analyzer->inCurrentScope(Cp)) - return; +if (!inCurrentScope(Cp)) +return; // Otherwise the negative requirement must be propagated to the caller. -LDat = FSet.findLock(Analyzer->FactMan, Cp); +LDat = FSet.findLock(FactMan, Cp); if