1// RUN: %clang_cc1 -triple x86_64-apple-darwin -x objective-c++ -emit-llvm -o - %s | FileCheck -check-prefix=WITHOUT %s 2// RUN: %clang_cc1 -triple x86_64-apple-darwin -x objective-c++ -emit-llvm -o - %s -fsanitize=thread | FileCheck -check-prefix=TSAN %s 3 4__attribute__((objc_root_class)) 5@interface NSObject 6- (void)dealloc; 7@end 8 9class NeedCleanup { 10public: 11 ~NeedCleanup() __attribute__((no_sanitize("thread"))) {} 12}; 13 14@interface MyObject : NSObject { 15 NeedCleanup v; 16}; 17+ (void) initialize; 18- (void) dealloc; 19@end 20 21@implementation MyObject 22+ (void)initialize { 23} 24- (void)dealloc { 25 [super dealloc]; 26} 27@end 28 29// WITHOUT-NOT: "sanitize_thread_no_checking_at_run_time" 30 31// TSAN: initialize{{.*}}) [[ATTR:#[0-9]+]] 32// TSAN: dealloc{{.*}}) [[ATTR:#[0-9]+]] 33// TSAN: cxx_destruct{{.*}}) [[ATTR:#[0-9]+]] 34// TSAN: attributes [[ATTR]] = { nounwind {{.*}} "sanitize_thread_no_checking_at_run_time" {{.*}} } 35