1 // Test for ANNOTATE_BENIGN_RACE_STATIC() and ANNOTATE_UNPROTECTED_READ(). 2 3 4 #include <pthread.h> /* pthread_create() */ 5 #include <stdio.h> /* fprintf() */ 6 #include "../../drd/drd.h" 7 8 9 /* Local variables. */ 10 11 static int s_i; 12 static volatile int s_j; 13 14 ANNOTATE_BENIGN_RACE_STATIC(s_i, "Benign because duplicate assignment."); 15 16 17 /* Local functions. */ 18 AnnotateIgnoreReadsBegin()19static inline void AnnotateIgnoreReadsBegin() { ANNOTATE_IGNORE_READS_BEGIN(); } AnnotateIgnoreReadsEnd()20static inline void AnnotateIgnoreReadsEnd() { ANNOTATE_IGNORE_READS_END(); } 21 thread_func(void *)22static void* thread_func(void*) 23 { 24 #if defined(__powerpc__) && __GNUC__ -0 == 4 && __GNUC_MINOR__ -0 == 3 \ 25 && __GNUC_PATCHLEVEL__ -0 == 0 26 AnnotateIgnoreReadsBegin(); 27 int i = s_j; 28 AnnotateIgnoreReadsEnd(); 29 s_i = i; 30 #else 31 s_i = ANNOTATE_UNPROTECTED_READ(s_j); 32 #endif 33 return 0; 34 } 35 main(int argc,char ** argv)36int main(int argc, char** argv) 37 { 38 pthread_t tid; 39 40 pthread_create(&tid, 0, thread_func, NULL); 41 s_j++; 42 s_i = s_j; 43 pthread_join(tid, NULL); 44 45 fprintf(stderr, "Done.\n"); 46 47 return 0; 48 } 49