blob: a35299619e9d959ca16195807ca32ea070aac006 [file] [log] [blame]
Stephen Hines6d186232014-11-26 17:56:19 -08001// RUN: %clangxx_tsan -O1 %s -o %T/global_race.cc.exe && %deflake %run %T/global_race.cc.exe | FileCheck %s
Stephen Hines86277eb2015-03-23 12:06:32 -07002#include "test.h"
Stephen Hines2d1fdb22014-05-28 23:58:16 -07003
4int GlobalData[10];
Stephen Hines2d1fdb22014-05-28 23:58:16 -07005
6void *Thread(void *a) {
Stephen Hines86277eb2015-03-23 12:06:32 -07007 barrier_wait(&barrier);
Stephen Hines2d1fdb22014-05-28 23:58:16 -07008 GlobalData[2] = 42;
Stephen Hines2d1fdb22014-05-28 23:58:16 -07009 return 0;
10}
11
12int main() {
Stephen Hines86277eb2015-03-23 12:06:32 -070013 barrier_init(&barrier, 2);
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080014 print_address("addr=", 1, GlobalData);
Stephen Hines2d1fdb22014-05-28 23:58:16 -070015 pthread_t t;
16 pthread_create(&t, 0, Thread, 0);
17 GlobalData[2] = 43;
Stephen Hines86277eb2015-03-23 12:06:32 -070018 barrier_wait(&barrier);
Stephen Hines2d1fdb22014-05-28 23:58:16 -070019 pthread_join(t, 0);
20}
21
22// CHECK: addr=[[ADDR:0x[0-9,a-f]+]]
Stephen Hines2d1fdb22014-05-28 23:58:16 -070023// CHECK: WARNING: ThreadSanitizer: data race
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080024// CHECK: Location is global 'GlobalData' {{(of size 40 )?}}at [[ADDR]] (global_race.cc.exe+0x{{[0-9,a-f]+}})
Stephen Hines6a211c52014-07-21 00:49:56 -070025