sparseset.c (sparseset_alloc): Use non-clearing allocation.

* sparseset.c (sparseset_alloc): Use non-clearing allocation.  Tell
	valgrind not to worry about reading from unitialized memory.

From-SVN: r190503
This commit is contained in:
Steven Bosscher 2012-08-18 13:44:00 +00:00
parent e0de76d8ad
commit a9c283a506
2 changed files with 11 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2012-08-18 Steven Bosscher <steven@gcc.gnu.org>
* sparseset.c (sparseset_alloc): Use non-clearing allocation. Tell
valgrind not to worry about reading from unitialized memory.
2012-08-18 Steven Bosscher <steven@gcc.gnu.org>
PR middle-end/54313

View File

@ -30,12 +30,14 @@ sparseset_alloc (SPARSESET_ELT_TYPE n_elms)
unsigned int n_bytes = sizeof (struct sparseset_def)
+ ((n_elms - 1) * 2 * sizeof (SPARSESET_ELT_TYPE));
/* We use xcalloc rather than xmalloc to silence some valgrind uninitialized
sparseset set = XNEWVAR(struct sparseset_def, n_bytes);
/* Mark the sparseset as defined to silence some valgrind uninitialized
read errors when accessing set->sparse[n] when "n" is not, and never has
been, in the set. These uninitialized reads are expected, by design and
harmless. If this turns into a performance problem due to some future
additional users of sparseset, we can revisit this decision. */
sparseset set = (sparseset) xcalloc (1, n_bytes);
harmless. */
VALGRIND_DISCARD (VALGRIND_MAKE_MEM_DEFINED (set, n_bytes));
set->dense = &(set->elms[0]);
set->sparse = &(set->elms[n_elms]);
set->size = n_elms;