xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/bugprone/signal-handler-posix.c (revision e8a3ddafe063c970df9c23e803812369abde4c82)
189a1d03eSRichard // RUN: %check_clang_tidy %s bugprone-signal-handler %t \
289a1d03eSRichard // RUN: -config='{CheckOptions: \
3*e8a3ddafSNathan James // RUN:  {bugprone-signal-handler.AsyncSafeFunctionSet: "POSIX"}}' \
489a1d03eSRichard // RUN: -- -isystem %clang_tidy_headers
589a1d03eSRichard 
689a1d03eSRichard #include "signal.h"
789a1d03eSRichard #include "stdlib.h"
889a1d03eSRichard #include "stdio.h"
989a1d03eSRichard #include "string.h"
1089a1d03eSRichard #include "unistd.h"
1189a1d03eSRichard 
handler_bad(int)1289a1d03eSRichard void handler_bad(int) {
1389a1d03eSRichard   printf("1234");
1489a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: standard function 'printf' may not be asynchronous-safe; calling it from a signal handler may be dangerous [bugprone-signal-handler]
1589a1d03eSRichard }
1689a1d03eSRichard 
handler_good(int)1789a1d03eSRichard void handler_good(int) {
1889a1d03eSRichard   abort();
1989a1d03eSRichard   _Exit(0);
2089a1d03eSRichard   _exit(0);
2189a1d03eSRichard   quick_exit(0);
2289a1d03eSRichard   signal(0, SIG_DFL);
2389a1d03eSRichard   memcpy((void*)10, (const void*)20, 1);
2489a1d03eSRichard }
2589a1d03eSRichard 
test(void)2689a1d03eSRichard void test(void) {
2789a1d03eSRichard   signal(SIGINT, handler_good);
2889a1d03eSRichard   signal(SIGINT, handler_bad);
2989a1d03eSRichard }
30