// Test for ANNOTATE_BENIGN_RACE_STATIC() and ANNOTATE_UNPROTECTED_READ(). #include /* pthread_create() */ #include /* fprintf() */ #include "../../drd/drd.h" /* Local variables. */ static int s_i; static volatile int s_j; ANNOTATE_BENIGN_RACE_STATIC(s_i, "Benign because duplicate assignment."); /* Local functions. */ static inline void AnnotateIgnoreReadsBegin() { ANNOTATE_IGNORE_READS_BEGIN(); } static inline void AnnotateIgnoreReadsEnd() { ANNOTATE_IGNORE_READS_END(); } static void* thread_func(void*) { #if defined(__powerpc__) && __GNUC__ -0 == 4 && __GNUC_MINOR__ -0 == 3 \ && __GNUC_PATCHLEVEL__ -0 == 0 AnnotateIgnoreReadsBegin(); int i = s_j; AnnotateIgnoreReadsEnd(); s_i = i; #else s_i = ANNOTATE_UNPROTECTED_READ(s_j); #endif return 0; } int main(int argc, char** argv) { pthread_t tid; pthread_create(&tid, 0, thread_func, NULL); s_j++; s_i = s_j; pthread_join(tid, NULL); fprintf(stderr, "Done.\n"); return 0; }