From: Bart Van Assche Date: Sun, 7 Mar 2010 19:59:35 +0000 (+0000) Subject: Added yet another regression test. X-Git-Tag: svn/VALGRIND_3_6_0~348 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6b202cf4fcc716bb8d3d35567a1544cb5c2fcef;p=thirdparty%2Fvalgrind.git Added yet another regression test. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11076 --- diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am index 3bc989ebae..4ca923cb05 100644 --- a/drd/tests/Makefile.am +++ b/drd/tests/Makefile.am @@ -16,6 +16,8 @@ noinst_HEADERS = \ EXTRA_DIST = \ annotate_hb_err.stderr.exp \ annotate_hb_err.vgtest \ + annotate_hb_race.stderr.exp \ + annotate_hb_race.vgtest \ annotate_hbefore.stderr.exp \ annotate_hbefore.vgtest \ annotate_order_1.stderr.exp \ @@ -249,6 +251,7 @@ EXTRA_DIST = \ check_PROGRAMS = \ annotate_hb_err \ + annotate_hb_race \ annotate_ignore_rw \ annotate_ignore_write \ annotate_publish_hg \ diff --git a/drd/tests/annotate_hb_race.c b/drd/tests/annotate_hb_race.c new file mode 100644 index 0000000000..76c3a94831 --- /dev/null +++ b/drd/tests/annotate_hb_race.c @@ -0,0 +1,50 @@ +/* + * Test program with happens-before / happens-after annotations that triggers + * a data race. The data race will only be reported if happens-after + * annotations that occur in different threads are not totally ordered. Or: + * this is a test for the implementation of ordering annotations. + */ + + +#include +#include +#include "unified_annotations.h" + + +static int s_i; + + +static void* thread_func(void* arg) +{ + int i; + + ANNOTATE_HAPPENS_AFTER(&s_i); + i = s_i; + ANNOTATE_HAPPENS_AFTER(&s_i); + *(int*)arg = i; + return NULL; +} + +int main(int argc, char** argv) +{ + pthread_t tid[2]; + int result[2]; + + ANNOTATE_HAPPENS_BEFORE(&s_i); + pthread_create(&tid[0], 0, thread_func, &result[0]); + pthread_create(&tid[1], 0, thread_func, &result[1]); + s_i = 1; + + pthread_join(tid[0], NULL); + pthread_join(tid[1], NULL); + + fprintf(stderr, "Done.\n"); + + return 0; +} + +/* + * Local variables: + * c-basic-offset: 2 + * End: + */ diff --git a/drd/tests/annotate_hb_race.stderr.exp b/drd/tests/annotate_hb_race.stderr.exp new file mode 100644 index 0000000000..7f28cdf445 --- /dev/null +++ b/drd/tests/annotate_hb_race.stderr.exp @@ -0,0 +1,9 @@ + +Conflicting store by thread x at 0x........ size 4 + at 0x........: main (annotate_hb_race.c:?) +Location 0x........ is 0 bytes inside local var "s_i" +declared at annotate_hb_race.c:14, in frame #? of thread x + +Done. + +ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0) diff --git a/drd/tests/annotate_hb_race.vgtest b/drd/tests/annotate_hb_race.vgtest new file mode 100644 index 0000000000..88f4608724 --- /dev/null +++ b/drd/tests/annotate_hb_race.vgtest @@ -0,0 +1,4 @@ +prereq: test -e annotate_hb_race && ./supported_libpthread +vgopts: --read-var-info=yes --check-stack-var=yes --show-confl-seg=no +prog: annotate_hb_race +stderr_filter: filter_stderr_and_thread_no