xref: /openbsd-src/gnu/llvm/clang/tools/clang-fuzzer/corpus_examples/objc/SharedInstance.m (revision e5dd70708596ae51455a0ffa086a00c5b29f8583)
1@interface RootObject
2+ (instancetype)alloc;
3
4- (instancetype)init;
5@end
6
7@interface BaseClass : RootObject
8+ (instancetype)sharedInstance;
9
10- (instancetype)initWithFoo:(int)foo;
11@end
12
13static BaseClass *sharedInstance = (void *)0;
14static int counter = 0;
15
16@implementation BaseClass
17+ (instancetype)sharedInstance {
18  if (sharedInstance) {
19    return sharedInstance;
20  }
21  sharedInstance = [[BaseClass alloc] initWithFoo:3];
22  return sharedInstance;
23}
24
25
26- (instancetype)initWithFoo:(int)foo {
27  self = [super init];
28  if (self) {
29    counter += foo;
30  }
31  return self;
32}
33@end
34
35