courbet added a comment.

> Is this actually required for the subsequent change? I don't see the 
> connection.

In the followup change, we have to check the returns after the enter and exit 
CFG block are computed. We can't analyze the returns as they are seen because , 
because what matters for the returns is the locks that are live at the end of 
the function, not those that are live at the point where the `return` happens.

The `BuildLockset` class only lives for the duration of the analysis of a 
single block, while the `ThreadSafetyAnalyzer` lives for the whole function. So 
return checking is done in the `ThreadSafetyAnalyzer`, so we need the 
check/warn functions to be available here.

From a design perspective I think it might actually make more sens for them to 
be in the analyzer as `warnIfMutexNotHeld` and friends actually inspects quite 
a lot of the `Analyzer` state.



================
Comment at: clang/lib/Analysis/ThreadSafety.cpp:1541
 class BuildLockset : public ConstStmtVisitor<BuildLockset> {
+  using VisitorBase = ConstStmtVisitor<BuildLockset>;
   friend class ThreadSafetyAnalyzer;
----------------
aaronpuchert wrote:
> Why the alias? I find this just obfuscates.
I'm using it one more time in the followup patch, but no strong opinion, 
removed.


================
Comment at: clang/lib/Analysis/ThreadSafety.cpp:1588
 /// 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 &FSet, const NamedDecl *D, const Expr *Exp, AccessKind AK,
----------------
aaronpuchert wrote:
> Hmm, functions of the same class naturally want to be together, but if you 
> move them, it "destroys" the Git history.
Yes, I decided to make review/history tracking esaier by not moving them, but I 
can move them if you want.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D153132/new/

https://reviews.llvm.org/D153132

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to