Revert "[lldb][test] Remove compiler version check and use regex" (#124101)
[llvm-project.git] / compiler-rt / test / tsan / Darwin / objc-race.mm
blob82fcc4ef1785fb95bd37a5c46f2a1183d45afb36
1 // RUN: %clang_tsan %s -o %t -framework Foundation
2 // RUN: %deflake %run %t 2>&1 | FileCheck %s
4 #import <Foundation/Foundation.h>
6 #import "../test.h"
8 @interface MyClass : NSObject {
9   long instance_variable;
11 - (void)method:(long)value;
12 @end
14 @implementation MyClass
16 - (void)method:(long)value {
17   self->instance_variable = value;
20 @end
22 int main() {
23   NSLog(@"Hello world.");
24   barrier_init(&barrier, 2);
25   
26   MyClass *my_object = [MyClass new];
27   [my_object method:42];
28   
29   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
30     [my_object method:43];
31     barrier_wait(&barrier);
32   });
33   
34   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
35     barrier_wait(&barrier);
36     [my_object method:44];
38     dispatch_sync(dispatch_get_main_queue(), ^{
39       CFRunLoopStop(CFRunLoopGetCurrent());
40     });
41   });
42   
43   CFRunLoopRun();
44   NSLog(@"Done.");
45   return 0;
48 // CHECK: Hello world.
49 // CHECK: WARNING: ThreadSanitizer: data race
50 // CHECK:   Write of size 8
51 // CHECK:     #0 -[MyClass method:]
52 // CHECK:   Previous write of size 8
53 // CHECK:     #0 -[MyClass method:]
54 // CHECK:   Location is heap block
55 // CHECK: Done.