aaronpuchert wrote:

> > On a related note, do we emit `-Wthread-safety-negative` for reentrant 
> > locks? I don't remember that we carved out an exception for that, and we 
> > probably should.
> 
> We do - and it's deliberate on my part as I've been trying to indicate that 
> there might be valid use cases for that. While conceptually contradictory, 
> there might be cases where developers want to ensure a reentrant mutex is NOT 
> held before entering a function.

Correct me if I'm wrong, but in my understanding, `-Wthread-safety-negative` is 
not a prerequisite for using negative capabilities in the manner you describe. 
The [only warning message under that 
flag](https://clang.llvm.org/docs/DiagnosticsReference.html#wthread-safety-negative)
 is "acquiring _A_ ‘_B_’ requires negative capability ‘_C_’", which warns when 
we're _acquiring_ the mutex without holding the negative capability:
```c++
class Foo
{
  Mutex mu;

public:
  void direct()
  {
    mu.Lock();   // warning: acquiring mutex 'mu' requires negative capability 
'!mu' [-Wthread-safety-negative]
    mu.Unlock();
  }

  void indirect()
  {
    requireNegative(); // warning: calling function 'require_neg' requires 
holding '!mu' [-Wthread-safety-analysis]
  }

  void requireNegative() REQUIRES(!mu);
};
```
Note that the warnings are under different flags. You seem to want the second 
one, which is under `-Wthread-safety-analysis`. But do we want the first one? 
That would seem contradictory.

https://github.com/llvm/llvm-project/pull/141599
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to