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

source code of clang/tools/clang-fuzzer/corpus_examples/objc/SharedInstance.m