49 lines · plain
1// RUN: %check_clang_tidy %s darwin-dispatch-once-nonstatic %t2 3typedef int dispatch_once_t;4extern void dispatch_once(dispatch_once_t *pred, void(^block)(void));5 6 7void bad_dispatch_once(dispatch_once_t once, void(^block)(void)) {}8// CHECK-MESSAGES: :[[@LINE-1]]:24: warning: dispatch_once_t variables must have static or global storage duration; function parameters should be pointer references [darwin-dispatch-once-nonstatic]9 10// file-scope dispatch_once_ts have static storage duration.11dispatch_once_t global_once;12static dispatch_once_t file_static_once;13namespace {14dispatch_once_t anonymous_once;15} // end anonymous namespace16 17int Correct(void) {18 static int value;19 static dispatch_once_t once;20 dispatch_once(&once, ^{21 value = 1;22 });23 return value;24}25 26int Incorrect(void) {27 static int value;28 dispatch_once_t once;29 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: dispatch_once_t variables must have static or global storage duration [darwin-dispatch-once-nonstatic]30 // CHECK-FIXES: static dispatch_once_t once;31 dispatch_once(&once, ^{32 value = 1;33 });34 return value;35}36 37struct OnceStruct {38 static dispatch_once_t staticOnce; // Allowed39 int value;40 dispatch_once_t once; // Allowed (at this time)41};42 43@interface MyObject {44 dispatch_once_t _once;45 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: dispatch_once_t variables must have static or global storage duration and cannot be Objective-C instance variables [darwin-dispatch-once-nonstatic]46 // CHECK-FIXES: dispatch_once_t _once;47}48@end49