------- Comment #9 from bart dot vanassche at gmail dot com 2009-06-13 16:23
-------
(In reply to comment #7)
The patch below is sufficient to suppress all conflicting accesses reported by
DRD. I've done my best to ensure that this patch is not only sufficient but
also minimal. Although Jakub Jelinek has already explained that the access
pattern of gomp_work_share::next_ws is safe, there are several other members of
struct gomp_work_share that have to be verified too.
$ diff -upr orig/gcc-4.4.0/libgomp gcc-4.4.0/libgomp
diff -upr orig/gcc-4.4.0/libgomp/work.c gcc-4.4.0/libgomp/work.c
--- orig/gcc-4.4.0/libgomp/work.c 2009-04-10 01:23:07.000000000 +0200
+++ gcc-4.4.0/libgomp/work.c 2009-06-13 18:00:55.000000000 +0200
@@ -29,6 +29,7 @@
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
+#include <valgrind/drd.h>
/* Allocate a new work share structure, preferably from current team's
@@ -92,6 +93,14 @@ void
gomp_init_work_share (struct gomp_work_share *ws, bool ordered,
unsigned nthreads)
{
+ DRD_IGNORE_VAR(ws->chunk_size);
+ DRD_IGNORE_VAR(ws->end);
+ DRD_IGNORE_VAR(ws->incr);
+ DRD_IGNORE_VAR(ws->mode);
+ DRD_IGNORE_VAR(ws->next);
+ DRD_IGNORE_VAR(ws->next_ws);
+ DRD_IGNORE_VAR(ws->threads_completed);
+
gomp_mutex_init (&ws->lock);
if (__builtin_expect (ordered, 0))
{
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40362