Vendor valgrind headers
All checks were successful
Tests / Release [gcc] total: 583, passed: 583
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/31//gcc">weaselab » conflict-set » main #31</a>
Tests / Coverage total: 581, passed: 581
weaselab/conflict-set/pipeline/head This commit looks good

This is encouraged according to https://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.clientreq
This commit is contained in:
2024-02-21 16:15:40 -08:00
parent 28e61340f4
commit 3750aa7b5b
10 changed files with 9197 additions and 23 deletions

View File

@@ -36,10 +36,7 @@ limitations under the License.
#include <arm_neon.h>
#endif
#if __has_include(<valgrind/memcheck.h>)
#define MEMCHECK
#include <valgrind/memcheck.h>
#endif
#include <memcheck.h>
// ==================== BEGIN IMPLEMENTATION ====================
@@ -59,14 +56,10 @@ struct BoundedFreeListAllocator {
}
assert(freeList != nullptr);
void *buffer = freeList;
#ifdef MEMCHECK
VALGRIND_MAKE_MEM_DEFINED(freeList, sizeof(freeList));
#endif
memcpy(&freeList, freeList, sizeof(freeList));
--freeListSize;
#ifdef MEMCHECK
VALGRIND_MAKE_MEM_UNDEFINED(buffer, sizeof(T));
#endif
return new (buffer) T;
}
@@ -78,16 +71,12 @@ struct BoundedFreeListAllocator {
memcpy((void *)p, &freeList, sizeof(freeList));
freeList = p;
++freeListSize;
#ifdef MEMCHECK
VALGRIND_MAKE_MEM_NOACCESS(p, sizeof(T));
#endif
}
~BoundedFreeListAllocator() {
for (void *iter = freeList; iter != nullptr;) {
#ifdef MEMCHECK
VALGRIND_MAKE_MEM_DEFINED(iter, sizeof(iter));
#endif
auto *tmp = iter;
memcpy(&iter, iter, sizeof(void *));
free(tmp);