1419ebb28SKuba Brecka// RUN: %clangxx_tsan %s -o %t -framework Foundation -std=c++11 2*e4c1dd2cSKuba Mracek// RUN: %run %t 2>&1 | FileCheck %s 3419ebb28SKuba Brecka 4419ebb28SKuba Brecka#import <Foundation/Foundation.h> 5419ebb28SKuba Brecka 6419ebb28SKuba Brecka#import <iostream> 7419ebb28SKuba Brecka#import <thread> 8419ebb28SKuba Brecka 9419ebb28SKuba Breckalong my_global; 10419ebb28SKuba Breckastd::once_flag once_token; 11419ebb28SKuba Brecka 12419ebb28SKuba Breckavoid thread_func() { 13419ebb28SKuba Brecka std::call_once(once_token, [] { 14419ebb28SKuba Brecka my_global = 17; 15419ebb28SKuba Brecka }); 16419ebb28SKuba Brecka 17419ebb28SKuba Brecka long val = my_global; 18419ebb28SKuba Brecka fprintf(stderr, "my_global = %ld\n", val); 19419ebb28SKuba Brecka} 20419ebb28SKuba Brecka 21419ebb28SKuba Breckaint main(int argc, const char *argv[]) { 22419ebb28SKuba Brecka fprintf(stderr, "Hello world.\n"); 23419ebb28SKuba Brecka 24419ebb28SKuba Brecka std::thread t1(thread_func); 25419ebb28SKuba Brecka std::thread t2(thread_func); 26419ebb28SKuba Brecka t1.join(); 27419ebb28SKuba Brecka t2.join(); 28419ebb28SKuba Brecka 29419ebb28SKuba Brecka fprintf(stderr, "Done.\n"); 30419ebb28SKuba Brecka} 31419ebb28SKuba Brecka 32419ebb28SKuba Brecka// CHECK: Hello world. 33419ebb28SKuba Brecka// CHECK-NOT: WARNING: ThreadSanitizer 34419ebb28SKuba Brecka// CHECK: Done. 35