1 // RUN: %check_clang_tidy %s bugprone-bad-signal-to-kill-thread %t
2 
3 #define SIGTERM 15
4 #define SIGINT 2
5 using pthread_t = int;
6 using pthread_attr_t = int;
7 
8 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
9                    void *(*start_routine)(void *), void *arg);
10 
11 int pthread_kill(pthread_t thread, int sig);
12 
13 int pthread_cancel(pthread_t thread);
14 
15 void *test_func_return_a_pointer(void *foo);
16 
main()17 int main() {
18   int result;
19   pthread_t thread;
20 
21   if ((result = pthread_create(&thread, nullptr, test_func_return_a_pointer, 0)) != 0) {
22   }
23   if ((result = pthread_kill(thread, SIGTERM)) != 0) {
24     // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: thread should not be terminated by raising the 'SIGTERM' signal [bugprone-bad-signal-to-kill-thread]
25   }
26 
27   //compliant solution
28   if ((result = pthread_cancel(thread)) != 0) {
29   }
30 
31   if ((result = pthread_kill(thread, SIGINT)) != 0) {
32   }
33   if ((result = pthread_kill(thread, 0xF)) != 0) {
34     // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: thread should not be terminated by raising the 'SIGTERM' signal [bugprone-bad-signal-to-kill-thread]
35   }
36 
37   return 0;
38 }
39