1 // RUN: %check_clang_tidy %s concurrency-thread-canceltype-asynchronous %t 2 3 #define ONE (1 << 0) 4 5 #define PTHREAD_CANCEL_DEFERRED 0 6 // define the macro intentionally complex 7 #define PTHREAD_CANCEL_ASYNCHRONOUS ONE 8 9 #define ASYNCHR PTHREAD_CANCEL_ASYNCHRONOUS 10 11 int pthread_setcanceltype(int type, int *oldtype); 12 main()13int main() { 14 int result, oldtype; 15 16 if ((result = pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype)) != 0) { 17 // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: the cancel type for a pthread should not be 'PTHREAD_CANCEL_ASYNCHRONOUS' [concurrency-thread-canceltype-asynchronous] 18 return 1; 19 } 20 21 if ((result = pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype)) != 0) { 22 return 1; 23 } 24 25 return 0; 26 } 27 f1()28int f1() { 29 int result, oldtype; 30 31 if ((result = pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype)) != 0) { 32 // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: the cancel type for a pthread should not be 'PTHREAD_CANCEL_ASYNCHRONOUS' [concurrency-thread-canceltype-asynchronous] 33 return 1; 34 } 35 36 if ((result = pthread_setcanceltype(ASYNCHR, &oldtype)) != 0) { 37 // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: the cancel type for a pthread should not be 'PTHREAD_CANCEL_ASYNCHRONOUS' [concurrency-thread-canceltype-asynchronous] 38 return 1; 39 } 40 41 return 0; 42 } 43 f2(int type)44int f2(int type) { 45 int result, oldtype; 46 47 if ((result = pthread_setcanceltype(type, &oldtype)) != 0) { 48 return 1; 49 } 50 51 return 0; 52 } 53