[clang] Reland "[clang analysis][NFCI] Preparatory work for D153131. (#67420)… (PR #67775)
llvmbot wrote: @llvm/pr-subscribers-clang Changes …" (#67523) Discussion in https://reviews.llvm.org/D153132. This reverts commit f70377471c990aa567584ae429e77adc9a55491b. --- Full diff: https://github.com/llvm/llvm-project/pull/67775.diff 1 Files Affected: - (modified) clang/lib/Analysis/ThreadSafety.cpp (+70-59) ``diff diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 3e6ceb7d54c427a..58dd7113665b132 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -1055,6 +1055,19 @@ class ThreadSafetyAnalyzer { } void runAnalysis(AnalysisDeclContext ); + + 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); }; } // namespace @@ -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); + 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)) +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 = FSet.findLockUniv(FactMan, Cp); bool NoError = true; if (!LDat) { // No exact match found. Look for a partial
[clang] Reland "[clang analysis][NFCI] Preparatory work for D153131. (#67420)… (PR #67775)
https://github.com/legrosbuffle closed https://github.com/llvm/llvm-project/pull/67775 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reland "[clang analysis][NFCI] Preparatory work for D153131. (#67420)… (PR #67775)
https://github.com/legrosbuffle created https://github.com/llvm/llvm-project/pull/67775 …" (#67523) Discussion in https://reviews.llvm.org/D153132. This reverts commit f70377471c990aa567584ae429e77adc9a55491b. >From efc22cc97bbc0238f9ab066132ba434d41677599 Mon Sep 17 00:00:00 2001 From: Clement Courbet Date: Fri, 29 Sep 2023 10:03:29 +0200 Subject: [PATCH] Reland "[clang analysis][NFCI] Preparatory work for D153131. (#67420)" (#67523) Discussion in https://reviews.llvm.org/D153132. This reverts commit f70377471c990aa567584ae429e77adc9a55491b. --- clang/lib/Analysis/ThreadSafety.cpp | 129 +++- 1 file changed, 70 insertions(+), 59 deletions(-) diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 3e6ceb7d54c427a..58dd7113665b132 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -1055,6 +1055,19 @@ class ThreadSafetyAnalyzer { } void runAnalysis(AnalysisDeclContext ); + + 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); }; } // namespace @@ -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); + 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)) +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) { -