32 lines · plain
1// RUN: %clangxx_tsan %s -o %t -framework Foundation -fobjc-arc2// RUN: not %run %t 2>&1 | FileCheck %s3// RUN: %env_tsan_opts=detect_deadlocks=1 not %run %t 2>&1 | FileCheck %s4// RUN: %env_tsan_opts=detect_deadlocks=0 %run %t 2>&1 | FileCheck %s --check-prefix=DISABLED5 6#import <Foundation/Foundation.h>7 8int main() {9 @autoreleasepool {10 NSObject* obj1 = [NSObject new];11 NSObject* obj2 = [NSObject new];12 13 // obj1 -> obj214 @synchronized(obj1) {15 @synchronized(obj2) {16 }17 }18 19 // obj1 -> obj120 @synchronized(obj2) {21 @synchronized(obj1) {22// CHECK: ThreadSanitizer: lock-order-inversion (potential deadlock)23 }24 }25 }26 27 NSLog(@"PASS");28// DISABLED-NOT: ThreadSanitizer29// DISABLED: PASS30 return 0;31}32