[PATCH] D84604: Thread safety analysis: Consider global variables in scope
Aaron Puchert via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 25 10:39:40 PDT 2020
aaronpuchert added inline comments.
================
Comment at: clang/lib/Analysis/ThreadSafety.cpp:1275
+ const ValueDecl *VD = LP->clangDecl();
+ return VD->isDefinedOutsideFunctionOrMethod();
+ }
----------------
aaron.ballman wrote:
> Hmm, I've not seen that function used a whole lot before, but looking at the implementation of it, I think it does what we need it to do here. FWIW, I was expecting something more like this:
> ```
> if (const DeclContext *DC = VD->getLexicalDeclContext())
> return !DC->getRedeclContext()->isFunctionOrMethod();
> ```
> But I'm not certain if this would ever give a different answer from your approach.
Never seen it before as well, but it does a `DC = DC->getParent()` loop, so there is probably a difference. Think about `DC` being a local struct or Objective-C block declaration.
================
Comment at: clang/test/SemaCXX/warn-thread-safety-negative.cpp:87-89
+ void test4() {
+ MutexLock lock(&mu); // expected-warning {{acquiring mutex 'mu' requires negative capability '!mu'}}
+ }
----------------
@lebedev.ri, I think that's pretty much your case. On my original change, this would have also warned about `scope`, not just `mu`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84604/new/
https://reviews.llvm.org/D84604
More information about the cfe-commits
mailing list