Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / compiler-rt / test / tsan / Darwin / objc-synchronize.mm
blob85aaa24d42fd38731311a6331cbadebde84c096f
1 // RUN: %clangxx_tsan %s -o %t -framework Foundation -fobjc-arc
2 // RUN: %run %t 2>&1 | FileCheck %s
4 #import <Foundation/Foundation.h>
6 @interface MyClass : NSObject {
7   long field;
9 @property (nonatomic, readonly) long value;
10 @end
12 dispatch_group_t group;
14 @implementation MyClass
16 - (void) start {
17   dispatch_queue_t q = dispatch_queue_create(NULL, NULL);
18   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
19     for (int i = 0; i < 1000; i++) {
20       dispatch_async(q, ^{
21         @synchronized(self) {
22           self->field = i;
23         }
24       });
25     }
26   });
29 - (long) value {
30   @synchronized(self) {
31     return self->field;
32   }
35 - (void)dealloc {
36   dispatch_group_leave(group);
39 @end
41 int main() {
42   group = dispatch_group_create();
43   @autoreleasepool {
44     for (int j = 0; j < 100; ++j) {
45       dispatch_group_enter(group);
46       MyClass *obj = [[MyClass alloc] init];
47       [obj start];
48       long x = obj.value;
49       (void)x;
50     }
51   }
52   dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
53   NSLog(@"Hello world");
56 // CHECK: Hello world
57 // CHECK-NOT: WARNING: ThreadSanitizer