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)1289a1d03eSRichardvoid 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)1789a1d03eSRichardvoid 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)2689a1d03eSRichardvoid test(void) { 2789a1d03eSRichard signal(SIGINT, handler_good); 2889a1d03eSRichard signal(SIGINT, handler_bad); 2989a1d03eSRichard } 30