brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 92d6f45 Raw
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