Issue 89844
Summary clang-tidy: Catch-22 with signals?
Labels clang-tidy
Assignees
Reporter DarkTyger
    Consider `t.cpp`:

``` cpp
#include <signal.h>

int main() {
 struct sigaction action = ""
    
  action.sa_handler = [](int signum ) {};
  action.sa_flags = 0;
  ::sigemptyset( &action.sa_mask );
 ::sigaction( SIGUSR1, &action, nullptr );
}
```

Run:

 clang-tidy --config-file=.clang-tidy src/t.cpp

Output:

```
t.cpp:1:10: warning: inclusion of deprecated C++ header 'signal.h'; consider using 'csignal' instead [modernize-deprecated-headers]
    1 | #include <signal.h>
      | ^~~~~~~~~~
      |          <csignal>
```

Change, then run again:

``` cpp
#include <csignal>

int main() {
  struct sigaction action = ""

  action.sa_handler = [](int signum ) {};
 action.sa_flags = 0;
  ::sigemptyset( &action.sa_mask );
  ::sigaction( SIGUSR1, &action, nullptr );
}
```

Output:

```
t.cpp:4:10: warning: no header providing "sigaction" is directly included [misc-include-cleaner]
    2 | 
    3 | int main() {
    4 |   struct sigaction action = ""
 |          ^
/home/jarvisd/repos/libdfsi/src/t.cpp:6:10: warning: no header providing "sa_handler" is directly included [misc-include-cleaner]
    6 |   action.sa_handler = [](int signum ) {};
      |          ^
/home/jarvisd/repos/libdfsi/src/t.cpp:8:5: warning: no header providing "sigemptyset" is directly included [misc-include-cleaner]
    8 |   ::sigemptyset( &action.sa_mask );
 |     ^
/home/jarvisd/repos/libdfsi/src/t.cpp:9:5: warning: no header providing "sigaction" is directly included [misc-include-cleaner]
    9 |   ::sigaction( SIGUSR1, &action, nullptr );
      | ^
/home/jarvisd/repos/libdfsi/src/t.cpp:9:16: warning: no header providing "SIGUSR1" is directly included [misc-include-cleaner]
    9 | ::sigaction( SIGUSR1, &action, nullptr );
      | ^
```

As `sigaction` is in POSIX, not the C++ standard, is it useful to warn against including `signal.h`? Is there a viable alternative?

See also: https://thomastrapp.com/posts/signal-handlers-for-multithreaded-c++/
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to