The attached patch, not yet for application, uses the Valgrind memcheck header
to mark items on the stack as initialized. This clears up most of the
uninitialized read errors in our Valgrind checks, which makes it easier to
find real errors.
I'm not applying this patch yet because we need a conditional include of the
Memcheck header, probably probed from configure, and an empty declaration of
this macro if it's not available. It's fine with me if the configuration
only runs during debugging mode or something similar.
-- c
=== src/gc/dod.c
==================================================================
--- src/gc/dod.c (revision 27223)
+++ src/gc/dod.c (local)
@@ -27,6 +27,7 @@
#define DOD_C_SOURCE
#include "parrot/parrot.h"
#include "parrot/dod.h"
+#include <valgrind/memcheck.h>
/* HEADERIZER HFILE: include/parrot/dod.h */
@@ -873,6 +874,8 @@
lo_var_ptr = tmp_ptr;
}
+ VALGRIND_MAKE_MEM_DEFINED(&lo_var_ptr, lo_var_ptr - hi_var_ptr);
+
/* Get the expected prefix */
prefix = mask & buffer_min;